2010-12-14 58 views
1

如果這是重複的道歉。以編程方式確定泛型類型

有什麼辦法可以確定一個類是什麼泛型?

即我想知道什麼是T ....

public void doSomething(SomeClass<T> thing) 
{ 
    Class<T> t = ???; 
} 

感謝頁。

+1

在運行時?沒有 - >查找類刪除,在編譯時更具體 – stacker 2010-12-14 22:22:27

回答

3

不在Java中。您也必須接受Class<T>的參數,調用者必須提供該參數。 (如果需要,可以在構造函數中執行此操作,以便類引用可用於所有類方法。)這是一個常用的入侵行爲,用於確定運行時引用的內容,否則由於方式Java實現泛型。

0

可以這樣做,只要T參數化爲類定義。例如:

interface IContainer<T> { 
    public void doSomething(SomeClass<T> thing) { 
    Class<?> t = TypeResolver.resolveArgument(getClass(), IContainer.class); 
    } 
} 

class ConatinerImpl implements IContainer<String> {} 

有關使用TypeResolver的更多信息,請參閱TypeTools