我有如下要求。我已经使用java中的Reflection加载了一组类[存在于jar文件中]。现在在loaded类中,我想调用loading类中的某些方法。
例如,假设存在类A和类B。使用反射,我从类A加载类B。因此,我可以从类A使用类B中的方法。但我想从类B使用类A中的一些方法。
非常感谢你的帮助。
谢谢。。
这似乎是一个错误的设计。尝试重新思考一下。您当前的设置可以通过应用singleton模式来解决。例如:
abstract class SomeSingleton {
private static SomeSingleton instance;
public static void setInstance(SomeSingleton instance) {
this.instance = instance;
}
public static SomeSingleton getInstance() {
return instance;
}
public abstract void someMethod();
}
class ClassA extends SomeSingleton {
public ClassA() {
SomeSingleton.setInstance(this);
}
@Override
public void someMethod() {
System.out.println("some methid is called");
}
}
class ClassB {
public void aMethod() {
SomeSingleton.getInstance().someMethod();
}
}
这样一来,B班就不必了解A班了。它只知道一项服务。ClassA向SomeSingleton报告它可以提供服务。-所以每个人都很开心。
你可以坚持你的类B(加载的类)有一个以a为参数的构造函数:
class B {
public B(A a) {
// etc...
}
}
然后在您的反射代码中,使用该构造函数实例化类。B现在可以用A做它需要的任何事情。你可以为一个特定的构造函数创建一个新的实例,如下所示:
Class<B> clazz = B.class;
clazz.getConstructor(new Class[] {A.class}).newInstance(a);
您可以让classB实现一个方法,通过该方法提供classA的实例,然后从classB内部使用该实例。
您只能通过显式地告诉您的classB实例关于classA来实现这一点,例如通过调用
b.setA(this)
来自CCD_ 1。