我遇到了仿製藥的問題,並且我想要的是在嘗試反映某些通用信息時進行類型擦除。意外類型擦除
我正在使用基於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
感謝
康拉德溫徹斯特
你可以在這裏看一下 - http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens –
這不會與類型擦除。擦除在編譯結束時發生,而您的錯誤在編譯期間發生。它會改爲不正確的使用泛型(我不太熟悉,對不起) –