2

Class<List>Class<List<?>>またはClass<List<Anything>実際に同じを参照しClassます。

しかし、私が持っている場合

class MyClass implements List<SomeClass> {
    // ...
}

私はそれから書くことができました

Class<? extends List<SomeClass>> myClass = MyClass.class;

それから私は書くことができます

List<SomeClass> myInstance = myClass.newInstance();

トリックは、このクラスをリフレクションを使用してロードし、同じ型でClassLoader.loadClass宣言したいということです。myClassこれを行う適切な/最も簡単な方法は何ですか?

コンパイルの警告が発生せず、必要のないソリューションが必要です@SuppressWarnings(これはおそらく、より強力なバージョンの のように、スーパー タイプの実行時チェックを行うことを意味しますClass.asSubclass)。

4

2 に答える 2

2
 public Class<?> loadClass(String name) throws ClassNotFoundException

Class<?> ジェネリッククラスを返すので、 your type information is lost here. したがって、目的のタイプにタイプキャストする必要があります。

于 2012-09-14T09:56:53.497 に答える
0

ジェネリック シグネチャを使用してクラスをコンパイルすると、ジェネリックに関するすべての情報が失われます。jvm の場合は、次のようになります。

class MyClass implements List {
    // ...
}

でクラスを逆コンパイルすると、これを確認できjavapます。一般的なものは表示されません。ジェネリックは主にコンパイル時のチェックに使用されます。したがって、リフレクションを使用してクラスをロードするときは、それを汎用バージョンにキャストする必要があります。

于 2012-09-14T10:21:33.590 に答える