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

Java中使用迭代器的类型推断?,java,collections,iterator,javac,type-inference,Java,Collections,Iterator,Javac,Type Inference,关于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

关于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());
}
arraylistprojectnamelist=新的ArrayList(3);
项目名称列表。添加(“Joe”);
项目名称列表。添加(“Jim”);
项目名称列表。添加(“Josh”);
Iterator it=names.Iterator();
while(it.hasNext()){
System.out.println(it.next());
}
当我试图打印名称时,出现编译错误,表示类型不匹配:无法从对象转换为字符串

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

Iterator it<String> = names.iterator();
Iterator it=names.Iterator();
但是我认为javac编译器应该足够聪明,可以推断迭代器返回的类型是字符串,因为迭代器()方法是在字符串的ArrayList上调用的


没有发生此类型推断的任何原因?

迭代器也是泛型类型

您需要将其声明为
Iterator it=names.Iterator()
将其元素引用为
字符串
s而不强制转换

将其声明为原始类型实际上会告诉编译器您希望引用是一个
迭代器


正如其他人所提到的,只要打印原始
迭代器的元素,就不会出现编译器错误-如果引用不存在的
projectNameList
变量,而不是,
名称

我不相信您的示例会给出该错误。您实际上会得到一个未声明的错误。如果你修复了,你将不会得到任何编译错误。请张贴你的实际代码道歉那里有一个打字错误,列表是用名称projectNameList声明的。更新了我的问题。