拥有这些通用接口和类:
interface TestIntf<T extends TestIntf<T>>
{
void test(T param);
}
class TestImpl<T extends TestIntf<T>> implements TestIntf<T>
{
@Override
public void test(T param) { System.out.println(param); }
}
这失败了:
Class<? extends TestIntf<?>> clz = TestImpl.class;
(类型不匹配:无法从Class<TestImpl>
转换为Class<? extends TestIntf<?>>
)
为什么呢?如何正确提供TestImpl
类的引用以匹配Class<? extends TestIntf<?>>
?
答案 0 :(得分:4)
你做不到。使用不安全的演员。
Class<? extends TestIntf<?>> clz = (Class<? extends TestIntf<?>>) TestImpl.class;
或者不要使用内部泛型:
Class<? extends TestIntf> clz = TestImpl.class;
更新:当它关注注释时,您无法做任何事情 - 必须更改注释。您不能让类文字表示泛型类型。