我正在尝试使用泛型类,但遇到了无法克服的障碍。简而言之,我遇到了一个我不明白为什么会抛出它的错误:InstantiationException
在文档中,它将此异常定义为:
当应用程序尝试使用 Class Class 中的 newInstance 方法创建类的实例,但指定的类对象由于它是接口或抽象类而无法实例化时抛出。
现在让我摸不着头脑的问题是我没有使用 abstract 或 interface 关键字。我还听说这可能是由于没有默认构造函数(我有)。可以肯定的是,我将代码减少到尽可能少,但仍然出现错误:
package Sandbox;
public class Sandbox {
public static void main(String[] args) {
Sandbox box = new Sandbox();
}
public Sandbox() {
aMethod(subThread.class);
}
public void aMethod(Class<? extends superThread> type) {
try {
System.out.println("isInterface: "+type.isInterface());
System.out.println("isAssignableFrom of subThread: "+type.isAssignableFrom(subThread.class));
superThread t = type.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
private class superThread { // implements Runnable {
public superThread() {}
public void run() {}
}
private class subThread extends superThread {
public subThread() {
super();
}
public void run() {
// more stuff
}
}
}
输出:
isInterface: false
isAssignableFrom of subThread: true
java.lang.InstantiationException: Sandbox.Sandbox$subThread
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at Sandbox.Sandbox.aMethod(Sandbox.java:20)
at Sandbox.Sandbox.<init>(Sandbox.java:11)
at Sandbox.Sandbox.main(Sandbox.java:7)
我敢肯定这很简单,但我无法弄清楚这一点。我已经尝试了几件事,但没有任何帮助。任何和所有的帮助表示赞赏。
谢谢,乔恩