【发布时间】:2015-06-03 15:30:43
【问题描述】:
关于Java中的类型推断,我有以下小sn-p代码:
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());
}
当我尝试打印名称时出现编译错误 Type mismatch: cannot convert from Object to String
我知道要解决这个问题,我需要做的就是将 Object 显式转换为 String,或者显式声明此迭代器返回的元素类型为 String 类型,如下所示:
Iterator it<String> = names.iterator();
但我原以为 javac 编译器会足够聪明地推断迭代器返回的类型是字符串,因为 iterator() 方法是在字符串的 ArrayList 上调用的。
没有发生这种类型推断的任何原因?
【问题讨论】:
-
我不相信你的例子给出了这个错误。
-
你实际上会得到一个错误,
projectNameList没有被声明。如果你修复它,你根本不会得到任何编译错误。 -
请发布您的实际代码
-
抱歉,这里有一个错字,该列表是用名称 projectNameList 声明的。更新了我的问题。
标签: java collections iterator javac type-inference