可能重複:
Generic type of local variable at runtime如何檢查通用類型是否在java中實現了特定類型的通用接口?
我是新來的Java泛型,並從.NET世界的未來,我已經習慣了能夠寫一個方法是這樣的:
public void genericMethod<T>(T genericObject)
{
if (genericObject is IList<String>)
{
//Do something...
}
}
該方法接受一個通用類型的對象,並檢查對象是否實現一個特定版本的通用接口IList<>
,在這種情況下,IList<String>
。
現在,在Java中,我能夠做到這一點:
public <T> void genericMethod(T genericObject)
{
if (genericObject instanceof Set<?>)
{
//Do something...
}
}
但
Java那樣不讓我做if (genericObject instanceof Set<String>)
據我所知,是因爲類型擦除,通常在Java中,這將由類對象處理,並且我們將執行如下操作:
public <T> void genericMethod(T genericObject)
{
Class<OurTestingType> testClass = OurTestingType.class;
if (genericObject.getClass() == testClass)
{
//Do something...
}
}
,但因爲我檢查的類型是一個通用的接口,你可以這樣做:
Class<Set<String>> testClass = Set<String>.class
那麼,如何在Java中,我做檢查,如果通用對象實現Set<String>
的具體類型?
泛型是一個編譯時功能,因此您不能簡單地獲取運行時使用的特定泛型類型。你可以從內容或附加的參數中推斷出它。 '類 t類' –