有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中使用迭代器的集合类型推断?

关于Java中的类型推断,我有以下代码片段:

ArrayList<String> projectNameList = new ArrayList<String>(3);
projectNameList.add("Joe");
projectNameList.add("Jim");
projectNameList.add("Josh");

Iterator it = names.iterator();

while(it.hasNext()){
   System.out.println(it.next());
}

当我试图打印名称时,我得到了一个编译错误,表示类型不匹配:无法从对象转换为字符串

我知道要解决这个问题,我需要做的就是显式地将对象强制转换为字符串,或者显式地声明这个迭代器返回的元素类型是String类型,如下所示:

Iterator it<String> = names.iterator();

但我认为javac编译器足够聪明,可以推断迭代器返回的类型是字符串,因为迭代器()方法是在字符串数组列表上调用的

为什么这种类型的推断不会发生


共 (1) 个答案

  1. # 1 楼答案

    Iterator也是泛型类型

    您需要将其声明为Iterator<String> it = names.iterator();,以便在不强制转换的情况下将其元素引用为String

    将其声明为原始类型实际上会告诉编译器,您希望引用是Iterator<Object>

    正如其他人所提到的,只要打印原始Iterator的元素,就不会出现编译器错误——如果引用一个不存在的projectNameList变量,而不是names,就会出现编译器错误