【发布时间】:2020-10-15 21:04:08
【问题描述】:
我对 Java 很陌生,所以这可能是一个愚蠢的问题,但我试图了解如何通过从现有实例获取类来创建类的新实例(我认为这称为反射)。
目前我有一个超类和它的几个子类。
public abstract class SuperClazz {...}
public class SubClazz1 extends SuperClazz {...}
public class SubClazz2 extends SuperClazz {...}
我有这些子类之一的现有实例(仅声明为超类的成员,因为我还不知道它将属于哪个子类)。我正在尝试获取此现有实例所属的任何子类,并为同一子类创建一个新实例。
这是我的设置:
private SuperClazz oldSubInstance;
private SuperClazz newSubInstance;
newSubInstance = oldSubInstance.getClass().getConstructor(String.class, char.class, int.class).newInstance("abc", 'e', 6);
这会引发 NoSuchMethodException。
我很困惑,因为我知道 SuperClazz 有一个构造函数,它接受三个参数,一个 String、一个 char 和一个 int。我查看了here 和here 的答案,但发现实施建议的修复不起作用,或者他们的问题不适用于我的情况。
我是否完全误解了 getConstructor 的工作原理?
【问题讨论】:
-
你也可以添加堆栈跟踪吗?我的第一个猜测是构造函数无法正确访问。
-
确保构造函数是公开的
-
getConstructor仅搜索public构造函数。如果构造函数不公开,请使用getDeclaredConstructor。
标签: java reflection constructor