使用此界面:
interface SomeInterface<E> {
List<E> getList();
}
这个实施:
private void someMethod(SomeInterface someImplementation) {
Object item = someImplementation.getList().get(0); // here
}
使用什么相应的数据类型?只是Object
,如图所示?
答案 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
。