摘要:中引入了新的语法用于局部变量类型推断,很多开发者有所疑惑,希望这篇文章能帮到你。对经常使用泛型的开发者来说,可能早就对上面的类型推断写法习以为常。简单说它是受限于它们存在的方法或循环声明的范围。
简评:Java var != JavaScript var。
Java 10 中引入了新的语法用于局部变量类型推断,很多开发者有所疑惑,希望这篇文章能帮到你。
什么是类型推断其实在 Java 中类型推断早就存在了,看下下面的例子:
public void doSomething() { final Listnames = new ArrayList (); // ^^^^^^------- Redundant ... }
在这个例子中给 ArrayList 定义持有的类型就没必要了,因为 List
public void doSomething() { final Listnames = new ArrayList<>(); // ^^------ Inferred! ... }
这两种写法是完全合法的,而且最终会形成一样的字节码。对经常使用泛型的开发者来说,可能早就对上面的类型推断写法习以为常。
那什么是局部变量类型推断?即能推断出方法中局部变量的类型,这是 Java 10 中新增的特性,对应关键词 var,看个例子 :
public void doSomething() { final ??? name = "Todd"; }
name 是什么类型,很明显是 String,而 Java 10 就可以让编译器帮我们判断其类型,我们只要写成下面的形式:
public void doSomething() { final var name = "Todd"; // name is inferred as a String! }
var 的使用不局限于函数内声明的变量,同时也可以用于循环的索引:
final Listnames = new ArrayList<>(); public void doSomething() { for(var name: names) { System.out.println("Name: " + name); } for(var i = 0; i < names.size(); i++) { System.out.println("Name: " + names.get(i)); } }
我必须使用 var 吗?不是的,老方法一样完美支持。
这样的做法危险吗?一个字:不。
简单说它是受限于它们存在的方法(或循环声明)的范围。这意味着除了声明它们的方法的开发之外,人们不编写依赖于这些类型的代码。
还有大家会有一个疑惑,很多语言也是不需要定义类型的,完全由编译器搞定,以 JavaScript 举例:
var x = "Todd"
简单吧,x 是 String 类型的,但是在 JS 中能重新定义类型,比如:
var x = "Todd" x = 42 // Now it"s an int?!
像这种 Java 以后是不是也不用考虑变量类型了?错,和JS 不一样,Java 中的 var 只能在局部变量使用外,同时是不能重复赋值的,就拿上面的例子,会导致编译错误:
public void doSomething() { var x = "Todd"; x = 42; // Compiler fails on this line: // Error: java: incompatible types: int cannot be converted to java.lang.String }
所以 var 一点都不危险,Java 也不会因此变成动态类型分配语言,这仅仅是对局部变量多了一种定义方式。
总结下Var 是我们的好朋友;
Java var != JavaScript var;
Var 解决了你显示声明变量的一些麻烦,但他们依然存在;
Var 声明的变量和显示声明的变量是一模一样的;
Var 类型变量不会影响到你其他的代码;
多了解一下总不会错吧!
原文链接: Java Developers: var Is Your Friend • Todd Ginsbergtodd.ginsberg.com
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72288.html
摘要:两日前,发了一篇吐槽,莫名的火了一把。关于的第一个,其实就是声明一个常量,不允许变更。另外对象迭代这里出自,阮一峰大神写的入门指南,对象篇。 两日前,发了一篇吐槽,莫名的火了一把。经过大家的建议与鼓励,于是修改了简历,开始了重新投递,2天后接到第一份面试邀请。 此文为个人面试经历,QA问答过程与总结,不透露面试公司及面试人员,内容真实,如果有面试过我的大佬看到博客,欢迎指出问题。 循序...
这两天和朋友谈到软件测试的发展:这一行的变化确实蛮大,从开始最基础的功能测试,到现在自动化、性能、安全乃至于以后可能出现的大数据测试、AI测试岗位需求逐渐增多。我也在软件测试这行摸爬滚打了十年了,正好有朋友问我:如何快速成为互联网时代优秀的测试工程师呢?趁着最近终于有了些闲余时间,遂总结了下自动化测试的成长线路图和职业必备技能,希望可以帮助各位少走弯路、破茧成蝶、迈向成功。 下面我来分享下自动化测...
阅读 2077·2023-04-25 19:15
阅读 2244·2021-11-23 09:51
阅读 1264·2021-11-17 09:33
阅读 2165·2021-08-26 14:15
阅读 2475·2019-08-30 15:54
阅读 1582·2019-08-30 15:54
阅读 2166·2019-08-30 12:50
阅读 1132·2019-08-29 17:08