Java:Raw Type对象中的泛型类型或我的参数化不起作用的原因

时间:2013-12-19 13:25:13

标签: java generics

我无法理解为什么我的界面参数化不起作用。我们来看下面的代码:

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>

1 个答案:

答案 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
    }
}

Combining Raw Types and Generic Methods