我正在使用反射为特定需求实例化类。
当前代码是这样的:
public final <T> T instanciate(Class<? extends T> a_clazz, Object... args) {
// Other stuff when no arg...
Class<?>[] l_argsClasses = getClassesFromObjects(args);
Constructor<?> constructor = a_clazz.getConstructor(l_argsClasses);
constructor.newInstance(args)
}
不幸的是,我读到当给定参数在构造函数声明中的类型不完全相同时,它将不起作用。
所以当我给一个子类时,没有找到构造函数,我得到一个 NoSuchMethodException。
这里好像没有处理多态的机制。
例子 :
public class A {
}
public class B extends A {
}
public class Foo extends A {
public Foo(A a) {
}
}
将工作 :
instanciate(Foo.class, new A()); // because Foo(A a)
不会工作:
instanciate(Foo.class, new B()); // because Foo(B b) does't exists
你有什么解决方案来处理这个问题吗?
谢谢
慕仙森
MMTTMM
相关分类