English 中文(简体)
使用反射反射的 Java 动态投射
原标题:Java Dynamic Casting using Reflection

我遵循代码。

家长类 :

class Parent{

        void a()
        {   
             if(// some logic to check whether child class is calling this method or some other class//)
             System.out.println("Child class is calling..")}
        }

儿童类:

class Child extends Parent{

        void b(){System.out.println(new Parent().a());}
}

某些其他类 :

 class Child1{

        void b(){System.out.println(new Parent().a());}
}

这里我称父母从一个儿童班和其他班级的a()方法。

我的问题是,我应该用什么逻辑来给家长们加上一种方法,如果是块,这样我才能确定哪个类的人叫这个方法。

我有一些代码,但没用的 请帮助我这个代码有什么问题

if(this.getClass().getClassLoader()
            .loadClass(new Throwable().getStackTrace()[0].getClassName())
            .newInstance() instanceof Parent)
 {
           System.out.println("Child class is calling..")}
 }
最佳回答

您有这些选项 :

  1. Parent 移动到不同的软件包, 并保护 a () 。 由于新软件包中没有其它分类, 只有子类才能调用该方法 。

  2. 您可以尝试堆叠追踪方法, 但您想要的信息不在第一个框架里 - 第一个框架是您称之为 < code> new drawable () 的地方。 尝试框架 1, 代之以( 这是 < code> a () 被调用的地方 ) :

    ...getStackTrace()[1]...
    

    如果您关心性能, 您应该隐藏此结果 。

说到这里,我想知道这个代码的目的是什么。我的直觉感觉是,你正在通过制造一个会造成不同痛苦的易碎工作来解决一个更深层的问题。也许你应该告诉我们你想要实现什么(大图 ) 。

问题回答

我发现了类似的东西 也许这就是你要找的

package pack;

class Parent {

    void a() {
        //my test
        try{
            throw new Exception();
        }
        catch (Exception e){
            //e.printStackTrace();
            if (!e.getStackTrace()[1].getClassName().equals("pack.Parent"))
                throw new RuntimeException("method can be invoked only in Parrent class");
        }

        //rest of methods body
        System.out.println("hello world");

    }

    public void b(){
        a();
    }

    //works here
    public static void main(String[] args) {
        new Parent().a();
        new Parent().b();
    }
}
class Child extends Parent{
    //RuntimeException here
    public static void main(String[] args) {
        new Parent().a();
        new Parent().b();
    }
}
class Child2{
    //RuntimeException here
    public static void main(String[] args) {
        new Parent().a();
        new Parent().b();
    }
}

忘了提到 b 方法在所有课程中都运作良好。 希望这是你想要的。 如果您不想运行时间例外, 请尝试 return 或扔掉其他例外 。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签