今天 看项目代码 发现有个变量定义:
val v = ...
这是什么鬼?怎么还这么定义了?火速查下 :
原来该定义来自Lombok,Lombok 中可以定义两种变量 val var
**Lombok.val** 官方文档介绍大致如下:
val 是用于声明局部变量的,他会根据初始化的表达式来对变量类型进行探测,使用val 的局部变量会被声明为final的,不可用于成员变量,并且他的初始化表达式是必须的(final)
public class VarTest {
public static void main(final String[] args) {
val map = new HashMap<String, String>(16);
map.put("1","apple");
map.put("2","pear");
map.put("3","banana");
for (val Entry : map.entrySet()) {
System.out.println("the fruit name :" + Entry.getValue());
}
}
}
其实 val 就是一种语法糖,反编译之后可以看到真实的类型了。
lombok.var 官方文档介绍大概意思:
var 跟 val 很像,只不过他标记的局部变量并不是final 的。
二、Java中的var关键字
首先,var关键字是 jdk 10 以后出现的,var关键字跟上面提到的lombok.val lombok.var 是 一样的,也是用于局部变量类型的推断,var 修饰的变量是非final的,如果需要可以加上final修饰。
这里就不做代码测试了,自己安装了 jdk10 的可以自行测试下。
这里 说下 自己对这个 变量定义使用的个人观点:
使用 lombok 定义的不建议使用,你自己使用了,别人就必须引入 lombok 使用,否则代码编译报错。给人一种极其不舒服的感觉。除非所在公司有过代码开发规范的统一,否则 真不建议 做强人所难的事情。
关于jdk10 自带的 var 变量定义模式,如果项目的版本 已经jdk10级别了,那就大胆用吧。