gpt4 book ai didi

java - 当参数是构造函数参数声明类型的子类时,反射找不到构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:41 25 4
gpt4 key购买 nike

我正在使用反射来实例化特定需求的类。

当前代码如下:

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

你有什么解决办法来处理这个问题吗?

谢谢

最佳答案

java.beans 包有类 StatementExpression它可以使用子类型规则执行必要的查找:

Expression e = new Expression(Foo.class, "new", new Object[]{ new B() });
Foo foo = (Foo)e.getValue();

execute method 的文档描述用于调用构造函数的特殊伪方法名称 "new"

关于java - 当参数是构造函数参数声明类型的子类时,反射找不到构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52221995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com