2010-03-22 73 views
0

有了這些通用接口和類:Java的遞歸泛型類的通配符匹配

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

回答

4

你不能。使用不安全的演員。

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

或不使用泛型內:

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

更新:當它認爲註解,有什麼可以做 - 註釋必須改變。你不能有一個類文字表示一個泛型類型。

+0

如果註釋中需要類引用,該怎麼辦?編譯器在那裏符合類型轉換。 – pingw33n 2010-03-22 12:48:26

+0

@ pingw33n檢查我的更新 – Bozho 2010-03-22 13:09:10

+0

查看Object.getClass的API文檔(粗體位)。 – 2010-03-22 14:26:45