都已经 2025 年了,为什么 Java Boy 还是不能接受 var 关键字

2025 年 3 月 7 日
 Oxonomy

最近尝试在 PR 里面用了这个 Java10 就有的关键字,结果老外和国人都不能接受,让我改回去。

但是只要把变量命名写的足够表意,我觉得一定程度上是可以使用 var 关键字的。

难道 java boy 不写动态语言吗?

14605 次点击
所在节点    Java
114 条回复
kneo
2025 年 3 月 7 日
不喜欢就是保守?非得喜欢你喜欢的?你写 Python 用类型标注吗?
mx1700
2025 年 3 月 7 日
因为大部分 java boy 不喜欢语法糖。
另外说 var 影响代码可读性,那只能说代码质量太差。
类型信息大多时候都是给编译器看的,读代码的时候都是干扰信息,所以较新的和教学术的语言都在搞非常强的类型推导,尽量保证不写类型也能有强类型约束。
itechify
2025 年 3 月 7 日
var 只在完整类型加在这一行会很长的情况下用
kisick
2025 年 3 月 7 日
新 java boy 表示强烈反对,写的时候没有便利,idea .var 就可以了,阅读的时候根本看不出来类型,可读性极差,你觉得优点在哪?
AlexHsu
2025 年 3 月 7 日
var 并不是什么先进的玩意
itechify
2025 年 3 月 7 日
@fengpan567 #37 怎么可能,object 只有 tostring hashcode 几个方法
securityCoding
2025 年 3 月 7 日
浪费生命,这种鸡毛蒜皮小事 leader 拍板就行了不要去争论
itechify
2025 年 3 月 7 日
@yazinnnn0 #18 +1 ,当完整类型太长的时候我也用 var 减少行的字符长度
liuliuliuliu
2025 年 3 月 7 日
@flytsuki +1 ,没有 var 活不了
InkStone
2025 年 3 月 7 日
@kisick 你在用什么编程,vim 吗? inlay type hint 所有 IDE 都支持……
cutiechi
2025 年 3 月 7 日
all in kt
dcsuibian
2025 年 3 月 7 日
我也反对用 var

因为 var 其实是做了类型推导的,而类型推导的结果不是我想要的
var q=new LinkedList<Integer>(); // 其实此时 q 是 LinkedList<Integer>
但如果没有 var ,我会这么写:
Queue<Integer> q=new LinkedList<>();
1 、用 var 的写法时,我就有可能在后面的代码中不小心调用了实现类 LinkedList 中特有的方法而不是 Queue 中通用的方法,这就导致如果我想切换实现类可能就会很麻烦
2 、如果你仅仅看 var 的这一行代码。当你看到 LinkedList 时,你可能第一反应是我想定义一个 List 而不是 Queue ,以为我想写成 List<Integer> q=new LinkedList<>();

3 、移植性。如果我现在写了一段有 var 的示例代码(但是除此之外没有什么新特性的),那 Java 8 或更低版本的就不能拷过来直接用
zuixinwenyue
2025 年 3 月 7 日
被拒绝心里难受来找安慰的。人家项目如果没有用 var 的,就你用拒绝你就拒绝了,不要玻璃心
HaibaraDP
2025 年 3 月 7 日
机器可以很快的推导类型,但人达不到机器的速度。用 var 定义变量的项目我看不了一点,尤其是 python 这种语法“简洁”的
sir283
2025 年 3 月 7 日
op 技术栈更偏向前端,有这种疑问也正常,不少 c#boy 、jsboy ,也有类似的疑问。

这就要追溯到 c 语言的指针函数跟函数指针了
Kamiyu0087
2025 年 3 月 7 日
不讨厌 var, 但讨厌没有 val
wwalkingg
2025 年 3 月 7 日
@dcsuibian 你说的场景,在平时开发中我认为不到 20%。
通常来说 var s = "Hello" 才是最常见的场景。
另外你说的问题其实也是有解决方案的 var q:Queue<Integer> =new LinkedList<>();
THESDZ
2025 年 3 月 7 日
java 设计的目标之一,就是拉高程序员写出程序的下限,包括但不限于,代码风格一致,代码可读性强,团队合作难度低。这也是 java 为什么这么啰唆的原因之一。
RandomJoke
2025 年 3 月 7 日
@wwalkingg 所以,这么写为什么用 var- -
dcsuibian
2025 年 3 月 7 日
@wwalkingg 本来就不多出现啊,但是只要出现了一次就挺烦人的,尤其是你是和多个人一起协作的时候
但如果不用 var 就不会有这种问题,主要还是 var 的收益感觉太低,不如直接写明白

另外你说的 var q:Queue<Integer> =new LinkedList<>();是啥写法?我这边编译都通不过,而且就算通过了也是脱裤子放屁吧

还有现在这个时代更重要的,我刚刚想到的,现在有了 AI 代码补全,我写一个 String s=,AI 就有了足够的提示信息,更加容易帮我补全,但是你写个 var s=,AI 就不太行了吧

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

https://study.congcong.us/t/1116515

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

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

© 2021 V2EX