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

231 天前
 Oxonomy

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

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

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

11439 次点击
所在节点    Java
114 条回复
MoYi123
230 天前
2025 还在说 java 8 新特性的人是这样的.
shijingshijing
230 天前
写 C 的看见这个更难受
shijingshijing
230 天前
@635925926 话说 PHP 的变量不还是加了个$么?凑合也算是个关键字了。。。
MRG0
230 天前
@sir283 #55 前端都不用了吧,都是 let const
yazinnnn0
230 天前
嗨, 说白了还是撅醒人和老古董的冲突

问几个问题
1. 一般声明局部变量的时候, 要不要声明为 final
2. 如果需要闭包的效果, 你要咋实现(1. 包成数组, 2. 包成原子引用 AtomicReference, 3. 新建个类)


作为 kotlin 撅醒人现在干活写 java 实在是太痛苦了
unco020511
230 天前
这项目还在用 java 你就只能这样写,否则就直接用 kotlin 了
aLazarus
230 天前
基于项目管理人的角度来说,我是不允许出现这种关键字的,因为项目迭代的时间长,开发人员也会出现换人的情况,这样会增加成本。

基于项目开发者的角度来说,在代码补全和 ai 提示如此先进的现在,使用 var 关键词带来的收益并不明显,还会影响 ai 补全的功能,后续业务代码多了的话是否会增加调试成本,也是需要考虑的
wwalkingg
230 天前
@dcsuibian #60 除了 Java ,你是否接触过其他语言?
wwalkingg
230 天前
@dcsuibian #60 除了 Java ,你是否接触过其他语言?
@dcsuibian #60 我偏题了,我说的不是 Java 了已经,sorry
zizon
230 天前
class Var extends Object{}

Var t = new SomeType();
t.call_some();

t = new AnotherType();
t.call_some();

感受一下.
dragondove
230 天前
@yazinnnn0 要在 lambda 中使用变量的话,最好的方式是使用一个包装类,性能最高(数组开销比单个引用对象大)。可以直接使用 apache commons 库里的 MutableInt/MutableObject ... 之类的类型。
jingdongkehu
230 天前
所以你想表达 你用 var 用出优越感了?
shijingshijing
230 天前
@zizon 主打一个随心所欲,又不是不能用
macaodoll
230 天前
“不要你觉得”
encoreee
230 天前
用这个代码可读性太差了
lavvrence
230 天前
我自己偶尔用,而且是方法返回前最后的几行中(不影响前面主要的业务逻辑,因为前几行都是拿数据啥的,类型直观明显一点),且类型名称非常长的情况下才使用 var 。
neptuno
230 天前
多人协作项目,要考虑大家的风格统一问题。另外 idea 直接用.var 更方便了。而且你就用这么一个案例,就隐射所有写 java 的程序员,不太好吧,是不是太极端了
AV1
230 天前
@dddd1919
即使在脚本语言里 var 声明也是必要的,尤其是在有闭包机制、函数嵌套的编程语言,因为要明确变量所属的作用域。

就比如 python ,看似不需要声明变量,赋值即命名很方便。但是如果你想要修改的是外层作用域的变量,你反而还得多写一句 nonlocal xxx 或 global xxx 。

另外曾经还有一个叫 coffeescript 的语言,也是没有 var 声明,赋值即命名。它有个比 python 更“狂野”的地方,你在内层作用域想命名赋值一个新变量,如果这个新变量不小心跟外层的某个变量同名怎么办?不好意思,不会创建新的变量,而是修改了外层那个旧的变量。也就是说,这门语言不存在变量遮蔽( variable shadowing )机制,你写代码、复制粘贴代码时必须小心翼翼,避免偶然创建了跟外层同名的变量,否则产生的 bug ,会非常难以发现。
codingKingKong
230 天前
我的习惯是:
1. new Axxx, 回车;
2.ctrl + shift + 回车;
3.ctrl + alt +v, 回车;
done. 没有看到 var 存在的意义;
我倒是很喜欢 jdk15 时候的多行字符串, 可惜我司一直 jdk8
Karte
230 天前
用 var 能够减少类型申明 (虽然可以通过 .val 快速申明), 但是会显示隐藏掉函数返回类型. 如果是一个新人进来看到一堆 var 关键字, 就得对每个方法进行 CTRL+Q 查阅方法返回数据类型, 或者进入方法内部查看, 相对不是十分便捷.

同样的, 由于 var 显示隐藏了对象的结构信息, 可以有效的把冗杂的类名或者泛型隐藏. 整体代码看起来会相对清爽 (但阅读同样存在障碍).

具体用还是不用, 一方面取决于团队内部, 还有一方面取决当前项目构型.
如果项目构型没有使用 var 关键字, 那尽可能不要使用, 会显著增加阅读代码的障碍 (虽然不是很大, 但有些人会觉得很头疼).
如果团队内部都支持, 建议在新项目内使用, 老项目则按部就班.

最好能在使用前与团队内部进行交流探讨, 让团队都了解这个特性, 并尝试了解他们所抵触的原因, 尝试对其进行化解才会更有效的推动新特性的使用.

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

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

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

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

© 2021 V2EX