我正在試驗泛型類,並且遇到了我無法克服的障礙。總之,我遇到了,我不明白爲什麼它被拋出的錯誤:InstantiationExceptionJava - 在Class <?上使用newInstance()的泛型類擴展myClass>:InstantiationException
在文檔就這個異常定義爲:
Thrown when an application tries to create an instance of a class using the newInstance method in class Class, but the specified class object cannot be instantiated because it is an interface or is an abstract class.
現在有我抓我的頭問題是我不使用抽象或接口關鍵字。我也聽說這可能是由於沒有默認的構造函數(我有)。只是可以肯定,我在我的代碼減少到最小的可能,但還是給出了一個錯誤:
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)
我敢肯定,這很簡單,但我不明白這一出。我嘗試了幾件事,但沒有任何幫助。任何和所有的幫助表示讚賞。
感謝, 喬恩
是的,你完全正確。我一直在尋找錯誤的地方。謝謝。 –
我很確定內部類的訪問級別與它無關。事實上,當它們公開時也會發生同樣的例外。如果它們是私有靜態的,則不會發生異常。 – VGR