真是天道好轮回, Java 新特性:用 var 关键字,数据类型可以扔掉了?

2020-09-30 15:00:28 +08:00
 shew5689

//JDK 10 中新增了 var 局部变量推断的功能:

//场景一:定义字符串 //旧写法:

String str = "Hello, Java.";

//新写法:

var s = "Hello, Java.";

//PS:这里的旧写法指的是 JDK 10 之前的版本,而新写法指的是 JDK 10 以后(包含 JDK 10 )的版本。

//场景二:数值相加 //旧写法:

int num1 = 111; double num2 = 555.666d; double num3 = num1 + num2; System.out.println(num3);

//PS:当遇到不同类型相加时( int+ double )会发生数据类型向上转型,因此 num3 就会升级为 double 类型。

//新写法:

var n1 = 111L; var n2 = 555.666; var n3 = n1 + n2; System.out.println(n3);

//场景三:集合 //旧写法:

List<Object> list = new ArrayList<>(); list.add("Hello"); list.add("Java");

//新写法:

var list = new ArrayList<>(); list.add("Hello"); list.add("Java"); //......

//JavaScript:我慢慢靠近你,你慢慢靠近我,你中有我,我中有你,我特么谢谢你~

7883 次点击
所在节点    Java
90 条回复
larisboy
2020-09-30 15:10:40 +08:00
还不如原来来的方便,出 BUG 都难找
wupher
2020-09-30 15:23:31 +08:00
类型推断,语言本身还是强类型的。

虽然 JDK10 目前用的比较少,但是 18 年后主力代码已使用 Kotlin 编写:一样可以不显示声明类型,使用推断。从我个人开发经验来讲还好,并不会出 BUG 难找。
titivillage
2020-09-30 15:26:23 +08:00
我选择 java,图的就是清晰的数据类型
neptuno
2020-09-30 15:28:20 +08:00
只是语法糖吧,,底层还是强类型,可以选择不用呀
mcluyu
2020-09-30 15:37:53 +08:00
类型推断跟强弱类型并不冲突, 只是从显示静态类型变为隐式,跟 JavaScript 的弱类型动态类型检查并不一样。
seakingii
2020-09-30 15:38:56 +08:00
var 只是语法糖,或许,在查看源代码时不能一目了然的看清楚变量的类型,但对编译器来说,此变量的类型和显示定义是一模一样的。
EscYezi
2020-09-30 15:42:44 +08:00
还是感觉不太习惯,经常不能第一时间看出变量的类型。每行长度倒是变短了
wysnylc
2020-09-30 15:43:16 +08:00
类型推断≠弱类型
class 里会变成实际类型
ipwx
2020-09-30 15:43:48 +08:00
... var 在 C#/Scala 里面都多少年了。连 C++ 都好多年前就实装 auto 关键字了。。。

还有,这哪是什么轮回。JS 的 var 关键字有作用域的傻逼设计,而 Java 的 var 和 C++ 他们一样都只是语法糖,作用域和原来一样,根本不是一个东西好不好。要我说,Java 这波就是借鉴 C#,而不是借鉴 JS 。
kraits
2020-09-30 15:49:22 +08:00
好像 var 的使用也有很多限制,我还是喜欢写类型声明,虽然懒也不写 var😂
Reficul
2020-09-30 15:50:01 +08:00
类型推导,本身语言还是强类型的,所以 IDE 和编译器一样能告诉你每个值的类型。

每次看到 Java Boy 发言,就忍不住又想地图炮。Java Boy 是不是都在自己的世界里,本能地拒绝先进改变。
glaucus
2020-09-30 15:50:21 +08:00
Kotlin 写多了觉得这种挺好的
allan888
2020-09-30 15:51:50 +08:00
说真的面对一个巨大的代码库我宁愿用旧的写法, 这样减少我读代码的心智负担。其实大公司一般一个人一星期写不了几行代码,读代码 vs 写代码时间可能超过 10:1.
lyb11232345688
2020-09-30 15:53:41 +08:00
第一次看到类型推断是在接触 golang 的时候,感觉挺好用的
chouchoui
2020-09-30 15:54:01 +08:00
dotnet: 北京申奥成功了
allan888
2020-09-30 15:54:53 +08:00
尤其是 code review 的时候我觉得这些省掉的部分都相当于某种程度的注释。
还有一个情况是很多滥用的 Stream api 真的是非常难看看懂。。。
shyling
2020-09-30 15:55:24 +08:00
别的语言早就能用的东西还要讨论什么好用不好用。。。这是有多井底之蛙
pkoukk
2020-09-30 15:56:42 +08:00
这不就是编译器的类型推断嘛?保守估计 c#至少 5 年前就有了..
cheng6563
2020-09-30 15:58:31 +08:00
用 IDEA 一般都是 "new Object()" 然后按 Ctrl+Alt+V,就能前面自动打出" Objec objec = " 了,感觉 var 没啥用。
echo1937
2020-09-30 16:01:35 +08:00
我看了日历,现在都 JDK15 了,怎么还在发 JDK10 特性的帖子。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/711895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX