我在公众号里发表的这篇文章《Java 11 更新了 String 字符串 API,你得重新认识它》被人评论说我 JavaScript 写多了,var 变量都出来。然后我给他解释,这是 java 10 的新特性,不是我 js 代码写多了。目前看来关于 java 10 中 var 这个关键词还有很多人没有使用过。所以今天我们一起就来抽个时间学习学习它!
Java 10 是在2018年3月20号正式发布的,其中的新特性之一就是 var 关键字。它将我们常常在JS里面使用的var 变量引入到语言特性中,把我们从那些冗长的变量声明中解放出来。以后我们在声明变量时,可以采用下面的方式:
var xttblog = new ArrayList<Xttblog>();
大家都知道 java 是一门强类型语言。也就是要显式声明各个变量的确切类型,稍有不慎编译器就会报错。例如我们创建一个对象,输入两次类型,一次是引用类型声明,另一次是构造函数。如下面的用法:
String xttblog = new String(":www.xttblog.com");
再比如,一个方法的返回类型是 Xttblog,那我们必须使用 Xttblog 类型来接受这个返回值。比如下面的代码:
Xttblog xttblog = XttblogCom.getXttblog();
讨厌 java 的人,经常吐槽 java 的强类型语言。它太麻烦了,让人头大。现在有了 java 10 的 var 关键字,一切都变的那么简单。
var 类型推断机制
程序在处理 var 类型时,编译器先是查看表达式右边部分,也就是所谓的构造器,并将它作为变量的类型,然后将该类型写入字节码当中。
那么这么说,是不是我以后只用 var 类型,其他类型都可以不用呢?
当然不行,如果这样的话,其他基本数据类型还有存在的必要吗?而且我上面说了,编译器在处理时,会自动的判断右侧是什么类型,并将它作为变量类型。常见的类似,下面的使用就不被允许:
var foo; foo = "Foo"; var ints = {0, 1, 2}; var appendSpace = a -> a + " "; private var getFoo(){}
java 官方强调了,var 只能用于带有构造器的局部变量,唯一例外的是 for 循环:
var numbers = List.of("a", "b", "c"); for (var nr : numbers) System.out.print(nr + " "); for (var i = 0; i < numbers.size(); i++) System.out.print(numbers.get(i) + " ");
JEP 286’的标题是“局部变量类型推断”, 看名称就可以知道使用范围:局部变量。更加确切的说法是:具有初始化器的局部类型变量声明。所以你们不要把它想的太强大,太无敌了。
var foo;foo = "www.xttblog.com";// 错误用法 var foo = "xttblog.com";// 正确用法
通过上面的举例,我们得出一个结论。字段、方法签名、catch子句仍然需要显示类型声明。
还有 var 类型一旦确定具体的变量类型后,就不能再变更类型了。比如下面的这些用法,都是错误的:
var users = new ArrayList<User>(); users = new LinkedList<>(); var id = 123; if (id < 100) { id = ":www.xttblog.com"; } else { // :www.xttblog.com }
根据 java 的官方调查得知,var 类型的推出,74% 的用户都是支持的,12% 的中度支持。反正我也是支持的,就算你想拒绝也是拒绝无效!
: » java 10 中 var 关键字(类型推断)使用教程
原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/251886.html