使用泛型返回接口的数据类型是什么?

时间:2015-11-06 21:17:04

标签: java

使用此界面:

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

这个实施:

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

使用什么相应的数据类型?只是Object,如图所示?

2 个答案:

答案 0 :(得分:3)

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

Object也可以,只要您以后不需要执行someImplementation.getList().add(item)之类的操作。这个例子的关键是它避免使用原始类型,因此编译器可以确保你编写了类型安全的代码。

答案 1 :(得分:1)

避免使用原始类型的另一种方法是在签名中使用通配符?。如果您这样做,item 的相应类型将为Object

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

这样做的缺点是你不能在方法体中使用泛型类型E