为什么java允许对象声明不包含该类型
Map> foos = new HashMap<>(); Map > foos = new HashMap >();
第二个声明比第一个声明正确,但为什么java在编译期间不会抛出警告.如何强制编译器抛出此类错误.
为什么java允许对象声明不包含该类型
Map> foos = new HashMap<>(); Map > foos = new HashMap >(); 第二个声明比第一个声明正确,但为什么java在编译期间不会抛出警告.如何强制编译器抛出此类错误.
从Java 7开始,上面的两个语句在编译时产生完全相同的字节码.
Java 7引入了菱形运算符("<>"),它允许编译器对类型声明语句执行类型推断.钻石操作员不得与原始类型混淆(根本不使用尖括号指定).
在上面的第一个语句中,编译器根据赋值语句左侧声明的类型推断
新实例化HashMap
的类型foos
.
菱形运算符实际上只是一些语法糖,它new
在赋值语句中使用运算符时允许一些简写,其中新对象的类型可以由编译器推断.
在Java 8中使用lambda表达式更广泛地使用类型推断,并且扩展了java编译器的类型推断规则,以允许类型推断在更广泛的情况下"像您期望的那样"工作.