我无法理解为什么我的界面参数化不起作用。我们来看下面的代码:
public interface IType {
public List<String> getAllItems();
}
......
public void function(IType item) {
for (String str : item.getAllItems()) { //DOESN'T WORK! Incompoatible types. Required String, Found: Object
}
}
为什么它会返回List<Object>
而不是List<String>
?
答案 0 :(得分:6)
我将假设您的IType
实际上是参数化(并且您刚刚确认了)类型如此
public interface IType<E> {
public List<String> getAllItems();
}
在这种情况下,如果将变量(或参数)声明为
IType item;
您正在使用原始类型。使用原始类型的变量,将删除在该变量上访问的方法或字段中的所有泛型类型。所以
public List<String> getAllItems();
变为
public List getAllItems();
因此List
Iterator
将返回Object
类型的引用。
public void function(IType item) {
for (String str : item.getAllItems()) { // DOESN'T WORK! Incompoatible
// types. Required String,
// Found: Object
}
}