Java 开发人员非常努力地避免改变现有程序的行为。List<String> list = new ArrayList();
确实编译,并创建一个原始的 ArrayList。如果对其应用类型推断,结果将是ArrayList<String>
,改变其行为并可能导致程序中其他地方的运行时错误。
==================================================== ===========================
经过进一步考虑和@millimoose 的评论,我发现行为的变化将是初始化程序的本地更改,并在编译时检测到。考虑以下程序:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws Exception {
List<Integer> integers = new ArrayList<Integer>();
integers.add(Integer.valueOf(3));
integers.add(Integer.valueOf(4));
List<String> list = new ArrayList(integers);
System.out.println(list);
}
}
没有类型推断,它会运行并打印,尽管包含 Integer 引用[3, 4]
的 a 存在不良情况。List<String>
ArrayList(Collection<? extends E> c)
使用类型推断,它不会编译,因为List<Integer>
在创建ArrayList<String>
.