我有如下要求。我已经使用java中的Reflection加载了一组类[存在于jar文件中]。现在在加载的类中,我想调用加载类中的某些方法。使用反射API加载另一个类(classB)的类(classsA)中的方法java
例如,假设A类和B类在那里。使用反射我从A类加载B类。因此,我可以使用A类中B类中的方法。但我想从B类中的A类中使用一些方法。
非常感谢您的帮助。
谢谢..
我有如下要求。我已经使用java中的Reflection加载了一组类[存在于jar文件中]。现在在加载的类中,我想调用加载类中的某些方法。使用反射API加载另一个类(classB)的类(classsA)中的方法java
例如,假设A类和B类在那里。使用反射我从A类加载B类。因此,我可以使用A类中B类中的方法。但我想从B类中的A类中使用一些方法。
非常感谢您的帮助。
谢谢..
您可以让ClassB的实现,通过它您提供CLASSA的一个实例,然后使用这个实例从内ClassB的方法。
您只能通过明确告诉您的classB实例关于classA来做到这一点,例如致电
b.setA(this)
从a
。
你可以坚持你的B类(加载的类)有一个构造函数,这需要作为一个参数:
class B {
public B(A a) {
// etc...
}
}
然后在你的反射代码,与构造函数实例化的类。 B现在可以做任何它与A需要您可以像这样的特定构造函数创建一个新的实例:
Class<B> clazz = B.class;
clazz.getConstructor(new Class[] {A.class}).newInstance(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();
}
}
这样ClassB不必了解ClassA。它只知道一项服务。 ClassA向SomeSingleton报告它可以提供该服务。 - 所以每个人都很开心。
如果我的答案不符合您的需求,请提供更多详细信息。 – vbence 2011-05-30 09:40:43