当限定每行不能超过 150 个字符的话,变量名就会被推到下一行显示,这样整个代码的可读性就变得很低。但当我们使用了
var
之后,代码就变成了这样:
var orderProcessor = createInternationalOrderProcessor(customer, order);
从上述的代码可以看出,当类型越长时,
var
(可读性)的价值就越大。
② 命名对齐
在不使用
var
时,当遇到下面这种情况,代码就是这样的:
// 显式类型 No no = new No(); AmountIncrease more = new BigDecimalAmountIncrease(); HorizontalConnection jumping = new HorizontalLinePositionConnection(); Variable variable = new Constant(6); List names = List.of("Java", "中文社群");
在使用了
var
之后,代码是这样的:
var no = new No(); var more = new BigDecimalAmountIncrease(); var jumping = new HorizontalLinePositionConnection(); var variable = new Constant(6); var names = List.of("Java", "中文社群");
从上述代码可以看出使用了
var
之后,命名对齐了,整个代码也变得更优雅了。
3、使用规则 & 反例
var
的实现来自于 JEP 286 (改善提议 286),详情地址 :http://openjdk.java.net/jeps/286
从 JEP 286 的标题“局部变量类型推断”可以看出,
var
只能用于局部变量声明,也就是说
var
必须满足以下条件:
它只能用于局部变量上;
声明时必须初始化;
不能用作方法参数和全局变量(类变量)。
PS:因为
var
的实现必须根据等会右边的代码进行类型推断,因此它不能被赋值 null 或不被初始化。
然后我们再用反编译工具打开被编译的类发现:
var
竟然被替换成一个个确定的数据类型了,如下图所示:
由此我们可以得出结论:
var
关键字的实现和它的名字密切相关,
var
只是局部类型推断,它只会在 Java 编码期和编译期有效,当类被编译为 class 文件时,
var
就会变成一个个确定的数据类型(通过推断得出)。
所以我们可以把
var
通俗的理解为 Java 的语法糖,使用它可以让我们快速优雅的实现业务代码,但
var
在字节码层面是不存在的。