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

231 天前
 Oxonomy

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

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

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

11438 次点击
所在节点    Java
114 条回复
kneo
230 天前
不喜欢就是保守?非得喜欢你喜欢的?你写 Python 用类型标注吗?
mx1700
230 天前
因为大部分 java boy 不喜欢语法糖。
另外说 var 影响代码可读性,那只能说代码质量太差。
类型信息大多时候都是给编译器看的,读代码的时候都是干扰信息,所以较新的和教学术的语言都在搞非常强的类型推导,尽量保证不写类型也能有强类型约束。
itechify
230 天前
var 只在完整类型加在这一行会很长的情况下用
kisick
230 天前
新 java boy 表示强烈反对,写的时候没有便利,idea .var 就可以了,阅读的时候根本看不出来类型,可读性极差,你觉得优点在哪?
AlexHsu
230 天前
var 并不是什么先进的玩意
itechify
230 天前
@fengpan567 #37 怎么可能,object 只有 tostring hashcode 几个方法
securityCoding
230 天前
浪费生命,这种鸡毛蒜皮小事 leader 拍板就行了不要去争论
itechify
230 天前
@yazinnnn0 #18 +1 ,当完整类型太长的时候我也用 var 减少行的字符长度
liuliuliuliu
230 天前
@flytsuki +1 ,没有 var 活不了
InkStone
230 天前
@kisick 你在用什么编程,vim 吗? inlay type hint 所有 IDE 都支持……
superchijinpeng
230 天前
all in kt
dcsuibian
230 天前
我也反对用 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
230 天前
被拒绝心里难受来找安慰的。人家项目如果没有用 var 的,就你用拒绝你就拒绝了,不要玻璃心
HaibaraDP
230 天前
机器可以很快的推导类型,但人达不到机器的速度。用 var 定义变量的项目我看不了一点,尤其是 python 这种语法“简洁”的
sir283
230 天前
op 技术栈更偏向前端,有这种疑问也正常,不少 c#boy 、jsboy ,也有类似的疑问。

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

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

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

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

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

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

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

© 2021 V2EX