ジェネリックに問題があり、いくつかのジェネリック情報を反映しようとしているときに型が消去されていると思います。
リフレクションを行うためにhttp://www.artima.com/weblogs/viewpost.jsp?thread=208860に基づくクラスを使用していますが、それは問題ではありません。
以下のコードは、この問題を示しています。
private <U extends MyClass1> U doSomething(MyClass2<U> p) {
Class<U> classIWant = null;
for (Class<?> c : GenericTypeUtils.getTypeArguments(MyClass2.class, p.getClass())) {
if (MyClass1.class.isAssignableFrom(c)) {
classIWant = c.asSubclass(MyClass1.class);
break;
}
}
}
残念ながらライン
classIWant = c.asSubclass(MyClass1.class);
次のエラーが表示されます
java: incompatible types
required: java.lang.Class<U>
found: java.lang.Class<capture#4 of ? extends MyClass1>
そして、それは本当に私を混乱させます。U は MyClass1 を拡張するため、U は MyClass1 です。
明らかに、私がここで理解していない型消去の一部があります-誰か助けてください。ところで、これはJava 1.7.0_40です
ありがとう
コンラッド・ウィンチェスター