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

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:我慢慢靠近你,你慢慢靠近我,你中有我,我中有你,我特么谢谢你~

larisboy:还不如原来来的方便,出 BUG 都难找

wupher:类型推断,语言本身还是强类型的。

虽然 JDK10 目前用的比较少,但是 18 年后主力代码已使用 Kotlin 编写:一样可以不显示声明类型,使用推断。从我个人开发经验来讲还好,并不会出 BUG 难找。

titivillage:我选择 java,图的就是清晰的数据类型

neptuno:只是语法糖吧,,底层还是强类型,可以选择不用呀

mcluyu:类型推断跟强弱类型并不冲突, 只是从显示静态类型变为隐式,跟 JavaScript 的弱类型动态类型检查并不一样。

seakingii:var 只是语法糖,或许,在查看源代码时不能一目了然的看清楚变量的类型,但对编译器来说,此变量的类型和显示定义是一模一样的。

EscYezi:还是感觉不太习惯,经常不能第一时间看出变量的类型。每行长度倒是变短了

wysnylc:类型推断≠弱类型
class 里会变成实际类型

ipwx:... var 在 C#/Scala 里面都多少年了。连 C++ 都好多年前就实装 auto 关键字了。。。

还有,这哪是什么轮回。JS 的 var 关键字有作用域的傻逼设计,而 Java 的 var 和 C++ 他们一样都只是语法糖,作用域和原来一样,根本不是一个东西好不好。要我说,Java 这波就是借鉴 C#,而不是借鉴 JS 。

kraits:好像 var 的使用也有很多限制,我还是喜欢写类型声明,虽然懒也不写 var?

Reficul:类型推导,本身语言还是强类型的,所以 IDE 和编译器一样能告诉你每个值的类型。

每次看到 Java Boy 发言,就忍不住又想地图炮。Java Boy 是不是都在自己的世界里,本能地拒绝先进改变。

glaucus:Kotlin 写多了觉得这种挺好的

allan888:说真的面对一个巨大的代码库我宁愿用旧的写法, 这样减少我读代码的心智负担。其实大公司一般一个人一星期写不了几行代码,读代码 vs 写代码时间可能超过 10:1.

lyb11232345688:第一次看到类型推断是在接触 golang 的时候,感觉挺好用的

chouchoui:dotnet: 北京申奥成功了

allan888:尤其是 code review 的时候我觉得这些省掉的部分都相当于某种程度的注释。
还有一个情况是很多滥用的 Stream api 真的是非常难看看懂。。。

shyling:别的语言早就能用的东西还要讨论什么好用不好用。。。这是有多井底之蛙

pkoukk:这不就是编译器的类型推断嘛?保守估计 c#至少 5 年前就有了..

cheng6563:用 IDEA 一般都是 "new Object()" 然后按 Ctrl+Alt+V,就能前面自动打出" Objec objec = " 了,感觉 var 没啥用。

echo1937:我看了日历,现在都 JDK15 了,怎么还在发 JDK10 特性的帖子。

kuro1:golang
a := "hellp"

cmdOptionKana:@allan888 读代码 /code review 主要看逻辑吧,多数时间不需要管类型啊。而且多数情况下如果类型有错,IDE 会有提示。

类型推导之所以能流行,就是因为实践中不需要那么 verbose 。

tabris17:C#早八百年就实现的语法糖

这只是类型推导,不是可变类型

tabris17:@pkoukk 我去考证了一下,C#3.0 的特性,2007 年就有了

majiaxin110:人家就是个语法糖

tctc4869:你才知道?

Java 初级后端岗位竞争太激烈了吧

joyhub2140:小公司,9 月初开放一个 java 后端,6k 其,学历放松到大专,年限放宽到应届。到目前为止,11 天的时间,500 个人过来撩,大专和本科比例大概 9 比 1,还能见到几个 211 本科的。太恐怖了。drydiy:因为相比其他行业,互联网行业平均薪资算不错了,再加上各种培训班的鼓吹,造成这种现象很正常。 TypeError:Java…

Java 怎么实现条件编译?

enenaaa:java 基础为零。维护的代码里,有个类引用到了 sun.awt.X11 。但是又想能跨平台编译,起码在 windows 和 linux 都能用。怎么屏蔽平台差异呢? 难道只能运行时加载类库么。czzt1:不需要处理的吧,直接可以跨平台的 wanglulei:jvm 了解一下,java 如何实现跨平台? wysnylc:去了解下 JVM 跨平…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

在Zip文件中以编程方式创建链接-Java - java

我正在使用ZipOutputStream创建一个zip文件。也将有一个清单文件(一个csv文件),该文件具有指向Zip文件中条目的链接。如何以编程方式为zip条目创建链接? 参考方案 如果在编写它们时跟踪所有条目,则应该能够添加另一个包含“链接”的条目(但是csv如何链接到文件?请指定要实现的目标)。如果打算在Windows下使用该文件,则可以以编程方式创建…