真是天道好轮回, 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:我慢慢靠近你,你慢慢靠近我,你中有我,我中有你,我特么谢谢你~

7940 次点击
所在节点    Java
90 条回复
MarioLuo
2020-09-30 17:28:04 +08:00
@wupher 准备下个新项目试试 kotlin, 空检查很棒,避免了 Java 中的一些防御性代码
wangwei1025
2020-09-30 17:32:51 +08:00
为什么不用 scala
InkStone
2020-09-30 17:36:43 +08:00
@shew5689 es 里的 var 不是语法糖,我认为稍微有点编译器知识的人都能看出这一点……

就像 dim a = 3 里的 dim 也不是语法糖一样。dim a as Integer = 3 能省略成 dim a = 3 才叫语法糖。

js 里有 var,纯粹是因为这样实现编译器比较简单(对比不需要 var 的 python ),这是一个语法盐,故意让你写着难受的。
shew5689
2020-09-30 17:37:10 +08:00
下班咯,祝楼上的老哥们,中秋国庆假期快乐~
sxfscool
2020-09-30 17:39:05 +08:00
楼主舌战群儒,🐂🍺🐂🍺
IGJacklove
2020-09-30 17:46:53 +08:00
这个不是早就有了? JDK11 就有了吧,我记得都是两三年前的事了
BoarBoar
2020-09-30 18:25:51 +08:00
这是语法糖吧,和 go 差不多,编译时就推断了类型
比起 python 之类的动态类型根本是两回事
Shook
2020-09-30 19:12:02 +08:00
和 C#的有啥不一样?
Cbdy
2020-09-30 19:46:23 +08:00
村网通系列。。
EminemW
2020-09-30 20:26:39 +08:00
我几年前就看过这个。。
wolfie
2020-09-30 22:13:46 +08:00
前几层没看到嘲讽楼主的话,反复确认时间。
Bromine0x23
2020-09-30 23:00:34 +08:00
es 的 var 变量声明和静态语言的类型推导特性显然不是一回事,像
```
var x = 1;
x = "1";
```
对类型推导来说不合法的,因为 var 表示的类型不是任意的,而需要根据赋值表达式推导出来的;一旦推导出来,所表示的类型就固定了。

要翻源头的话,应该是某个函数式语言开始的,像 83 年的 Standard ML 就已经有这个特性了
simpledwcom
2020-09-30 23:51:55 +08:00
没用的鸟功能,我就想要强类型的。。。
aguesuka
2020-10-01 09:38:30 +08:00
新特性 x
不是贴别旧的特性 o
aguesuka
2020-10-01 09:41:26 +08:00
@tachikomachann 早就有了
yiyi11
2020-10-01 10:13:42 +08:00
new Object().var + tab 键 or enter 键,自动返回值类型补全。智能提示真是太棒啦。你说什么?我一直在用 idea 啊。
xuanbg
2020-10-01 10:35:22 +08:00
这个叫类型推断,不是没有数据类型好吧。var a = new String();变量 a 难道就不是 String 类型了?编译器能够从 new String()得到 a 的类型,不需要你特意指定 a 的类型而已。

idea 有个插件,可以把类型隐藏掉,然后显示为 var……
JB18CM
2020-10-01 11:04:00 +08:00
标题党,无聊至极
littlewing
2020-10-01 13:40:46 +08:00
强类型的语言搞这种东西没什么用,就像 py 一样
liyhu
2020-10-01 13:59:56 +08:00
感觉是挺没用的,我也不喜欢这个语法糖

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

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

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

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

© 2021 V2EX