2015-11-06 69 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