Java递归泛型类通配符匹配

时间:2010-03-22 12:40:51

标签: java generics

拥有这些通用接口和类:

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<?>>

1 个答案:

答案 0 :(得分:4)

你做不到。使用不安全的演员。

Class<? extends TestIntf<?>> clz = (Class<? extends TestIntf<?>>) TestImpl.class;

或者不要使用内部泛型:

Class<? extends TestIntf> clz = TestImpl.class;

更新:当它关注注释时,您无法做任何事情 - 必须更改注释。您不能让类文字表示泛型类型。