gpt4 book ai didi

java - 为什么java允许对象声明不包含类型

转载 作者:行者123 更新时间:2023-11-29 09:47:22 27 4
gpt4 key购买 nike

为什么java允许对象声明不包含类型

Map<Integer, Set<Integer>> foos = new HashMap<>();
Map<Integer, Set<Integer>> foos = new HashMap<Integer, Set<Integer>>();

第二个声明比第一个声明正确,但为什么 java 在编译期间不抛出警告。我怎样才能强制编译器抛出此类错误。

最佳答案

Why java allows object declaration to not contain the type

Map<Integer, Set<Integer>> foos = new HashMap<>(); 
Map<Integer, Set<Integer>> foos = new HashMap<Integer, Set<Integer>>();

The second declaration is correct than the first, but why doesn't java throw a warning during compilation. How can I force the compiler to throw such errors.

从 Java 7 开始,上述两个语句在编译时会产生完全相同的字节码。

Java 7 引入了菱形运算符(“<>”),它允许编译器对类型声明语句执行类型推断。不得将菱形运算符与原始类型(完全不使用尖括号来指定)混淆。

在上面的第一条语句中,编译器推断出类型 <Integer, Set<Integer>>对于新实例化的 HashMap来自 foos 的类型在赋值语句的左侧声明。

菱形运算符实际上只是一点语法糖,在使用 new 时允许一些速记。编译器可以推断新对象类型的赋值语句中的运算符。

Java 8 中使用 lambda 表达式更广泛地使用类型推断,并且扩展了 java 编译器的类型推断规则以允许类型推断在更广泛的情况下“像您期望的那样”工作。

关于java - 为什么java允许对象声明不包含类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34524418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com