【发布时间】:2017-02-17 20:14:02
【问题描述】:
我有一个超类 OpCode 和子类 Add/And..etc
我正在尝试根据类名字符串反思性地构造子类。构造函数采用超类中定义的枚举。
我正在尝试:
OpCode theOpCode = (OpCode) Class.forName("com.sstangle.opCodes." + opCodeName).getConstructor(OpCode.OpEn.class).newInstance(opEn);
导致
java.lang.NoSuchMethodException: com.sstangle.opCodes.Add.<init>(com.sstangle.opCodes.OpCode$OpEn)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getConstructor(Unknown Source)
添加类是
public class Add extends OpCode {
Add(final OpEn opEn) {
super(opEn);
this.assemblyCommand = "ADD";
}
}
操作码类是
public abstract class OpCode {
OpCode(final OpEn opEn) {
this.opEn = opEn;
}
public static enum OpEn {
I, MI, MR, RM, ZO
}
}
如何正确访问采用枚举的构造函数?
谢谢
【问题讨论】:
-
那个特定的类没有这样的构造函数采用
com.sstangle.opCodes.OpCode$OpEn。你能展示Add类的构造函数吗? -
@AndyTurner 已更新。
-
问题是 ctor 不是公开的。尝试将其公开,或使用
getDeclaredConstructor。 -
ctor 必须是公开的,而不仅仅是类。
-
doh,是的。谢谢
标签: java reflection constructor enums