AI智能
改变未来

一文看懂 java 10 中 var 关键字(类型推断)!

由于微信中对代码排版不是很友好,你需要点击页尾左下角的“阅读原文”,才能有更好的阅读体验。

我在公众号里发表的这篇文章《Java 11 更新了 String 字符串 API,你得重新认识它》被人评论说我 JavaScript 写多了,var 变量都出来。然后我给他解释,这是 java 10 的新特性,不是我 js 代码写多了。目前看来关于 java 10 中 var 这个关键词还有很多人没有使用过。所以今天我们一起就来抽个时间学习学习它!

Java 10 是在2018年3月20号正式发布的,其中的新特性之一就是 var 关键字。它将我们常常在JS里面使用的var 变量引入到语言特性中,把我们从那些冗长的变量声明中解放出来。以后我们在声明变量时,可以采用下面的方式:

1var xttblog = new ArrayList<Xttblog>();

大家都知道 java 是一门强类型语言。也就是要显式声明各个变量的确切类型,稍有不慎编译器就会报错。例如我们创建一个对象,输入两次类型,一次是引用类型声明,另一次是构造函数。如下面的用法:

1String xttblog = new String(\"业余草:www.xttblog.com\");

再比如,一个方法的返回类型是 Xttblog,那我们必须使用 Xttblog 类型来接受这个返回值。比如下面的代码:

1Xttblog 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% 的中度支持。反正我也是支持的,就算你想拒绝也是拒绝无效!

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

转发就是对我最大的支持!

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 一文看懂 java 10 中 var 关键字(类型推断)!