wor*_*ise 1 java interface class instantiation derived-class
在下面的代码中,我得到了java.lang.InstantiationException
(下面是编译独立编译的代码 - 在我的应用程序中,我想维护一个Enum-> Class map,并在从文件读取整数值时,实例化查看地图的相应类).
如何摆脱这个错误?有语法问题吗?我必须使用接口吗?我在这里的理解是有限的.
class Main {
abstract class Base {
Base() {};
void print() {
System.out.println("I am in Base");
}
}
class D1 extends Base {
D1() {};
@Override
void print() {
System.out.println("I am in D1");
}
}
static Class<? extends Base> getMyClass() {
return D1.class;
}
public static void main(String[] args) {
try {
Class<?> cc = getMyClass();
Object oo = cc.newInstance();
Base bb = (Base) oo;
bb.print();
} catch (Exception ee) {
System.out.println(ee);
};
}
};
Run Code Online (Sandbox Code Playgroud)
您的代码有两个问题:
Base并且D1是非静态内部类.这意味着他们可以访问声明class(Main)的字段和方法,因此他们应该持有对实例的引用Main.因此,它们的构造函数有一个隐式的类型参数,Main用于传递该引用.因此,它们没有no-args构造函数,您应该使用单参数构造函数:
Object oo = cc.getConstructor(Main.class).newInstance(new Main());
Run Code Online (Sandbox Code Playgroud)
或者,您可以简单地将它们声明为static,或者在它们之外声明它们Main- 在这种情况下,它们将无法访问其成员,Main并且不需要对其进行引用.
D1应该是构造函数public.否则,您需要调用setAccessible(true)以使其可用于反射.
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |