我遇到了泛型问题,我认为是类型擦除,同时试图反映一些通用信息。
我正在使用基于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
谢谢
康拉德温彻斯特