typemoon Asked:2024-05-31 20:39:31 +0800 CST2024-05-31 20:39:31 +0800 CST 2024-05-31 20:39:31 +0800 CST 在 Java 中使用 var 772 varJava 中的类型推断有什么问题?一位同事问我经常用什么var,这是否是动态类型 Javascript 的回声。 对我来说,这些都是autoC++ 中类型推断的回声。我应该使用 Java 项目var而不是显式指定类型吗?优缺点都有什么?您正在使用var? java 2 个回答 Voted Best Answer Denis Lebedev 2024-06-02T19:02:04+08:002024-06-02T19:02:04+08:00 编译器根据分配给变量的值推断类型。但这不应该被滥用。 适合使用var 的情况: 您可以通过查看分配的值轻松确定变量的类型: var stream = url.getInputStream(); var name = person.getFullName(); 变量的类型对于理解代码并不重要: for(var tmp : list) System.out.println(tmp); Зонтик 2024-06-03T00:08:41+08:002024-06-03T00:08:41+08:00 为了理解var,我建议回顾一下类似的东西 - 例如,Java 7 中出现的类型推断: SomeGenericClass<Integer> = new SomeGenericClass<>(); 这不是动态类型,对吧?第二个尖括号中的类型是显而易见的。因此不需要指定两次。 创建对象时,类型也被写入两次。如果类名很长,那么这可能会很不方便: JFormattedTextField textField = new JFormattedTextField(); 因此,第一个类型声明可以替换为var(当然,如果它是局部变量!)。它将简短而清晰: var textField = new JFormattedTextField(); 编译器将完全理解应该用什么来代替var. 但这里最重要的是不要对新产品过度使用,也不要写出难以理解的var东西。反例: //comboBox = javax.swing.JComboBox var item = comboBox.getItemAt(3); 该项目可以是任何东西,该类JComboBox是参数化的,并且该方法getItemAt()返回E。我们必须看看这个对象是如何声明的,它使用什么类型的数据......
编译器根据分配给变量的值推断类型。但这不应该被滥用。
适合使用var 的情况:
您可以通过查看分配的值轻松确定变量的类型:
变量的类型对于理解代码并不重要:
为了理解
var
,我建议回顾一下类似的东西 - 例如,Java 7 中出现的类型推断:这不是动态类型,对吧?第二个尖括号中的类型是显而易见的。因此不需要指定两次。
创建对象时,类型也被写入两次。如果类名很长,那么这可能会很不方便:
因此,第一个类型声明可以替换为
var
(当然,如果它是局部变量!)。它将简短而清晰:编译器将完全理解应该用什么来代替
var
.但这里最重要的是不要对新产品过度使用,也不要写出难以理解的
var
东西。反例:该项目可以是任何东西,该类
JComboBox
是参数化的,并且该方法getItemAt()
返回E
。我们必须看看这个对象是如何声明的,它使用什么类型的数据......