2015-11-06 99 views
0

有了這個接口:使用泛型返回Interface的數據類型是什麼?

interface SomeInterface<E> { 
    List<E> getList(); 
} 

實施這一項目:

private void someMethod(SomeInterface someImplementation) { 
    Object item = someImplementation.getList().get(0); // here 
} 

什麼是合適的數據類型使用?只需Object,如圖所示?

+1

難道你不能讓'someMethod'通用嗎? – 5gon12eder

+3

由於您僅使用原始類型,因此對象在此處可以接受(不需要顯式轉換)。如果你使用'SomeInterface ',那麼你可以在'T'類型的引用中存儲'get()'的結果。 – Pshemo

+3

適合什麼?你打算用'item'做什麼? –

回答

3
private <T> void someMethod(SomeInterface<T> someImplementation) { 
    T item = someImplementation.getList().get(0); // here 
} 

Object是沒關係,只要你不需要做這樣的事情以後someImplementation.getList().add(item)。這個例子的關鍵是避免使用原始類型,以便編譯器可以確保您編寫了類型安全的代碼。

1

另一種避免使用原始類型的方法是在簽名中使用通配符?。如果你沒有這樣合適的類型itemObject

private void someMethod(SomeInterface<?> someImplementation) { 
    Object item = someImplementation.getList().get(0); 
} 

做這種方式的缺點是,你不能在法的身體使用泛型類型E