私はジェネリッククラスを試していますが、克服できないハードルに遭遇しました。要するに、なぜそれがスローされているのか理解できないエラーが発生しています:InstantiationException
ドキュメントでは、この例外を次のように定義しています。
アプリケーションがクラス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)
とても簡単だと思いますが、これはわかりません。私はいくつかのことを試しましたが、何も役に立ちませんでした。ありとあらゆる助けをいただければ幸いです。
ありがとう、ジョン