V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Oxonomy
V2EX  ›  Java

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

  •  
  •   Oxonomy · 180 天前 · 10867 次点击
    这是一个创建于 180 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  180 天前
    PS: Java Boy 并不是贬义,这里等同于 Javaer
    114 条回复    2025-03-27 00:30:53 +08:00
    1  2  
    cubecube
        101
    cubecube  
       179 天前   ❤️ 1
    @sagaxu #98
    你用过 github 的 PR 功能么?大厂自研的代码 CR 功能类似,一般都是 web 化,在线的,怎么弄 IDEA 。。
    lisongeee
        102
    lisongeee  
       179 天前
    @cubecube

    所以你的意思是,大厂的 CR 只在网页上看就完了,是不需要在本地 idea 打开查看的是吗?

    好奇在常用的 java lambda 表达式里,你是喜欢写 (x, y) -> {} 还是喜欢写 (x:XType, y:YType) -> {} 呢?
    JavasBoy
        103
    JavasBoy  
       179 天前
    这个问题,我觉得大家的讨论很有价值,看得出各位都是经验丰富的 Javaer 。

    首先,我得说,提 PR 被拒,要求改回不用 var ,这事儿确实挺让人郁闷的。毕竟 Java 10 都出来这么久了,var 也不是什么洪水猛兽。

    不过,平心而论,大多数朋友的顾虑我也能理解。Java 毕竟是一门强调类型安全的静态语言,var 用多了,确实可能影响代码的可读性,尤其是在那些业务逻辑复杂、动辄几万行代码的大型项目里。一眼看过去全是 var ,确实挺让人头大的,还得一个个去推断类型,这维护成本蹭蹭就上去了。

    但话说回来,var 也不是完全没用武之地。在一些类型很明显、或者类型名特别长的情况下,用 var 就能让代码清爽不少。而且,现在很多新语言都支持类型推断,Java 适当借鉴一下也没啥不好。

    我觉得吧,这事儿主要还是看团队习惯和项目规范。要是团队里大家都喜欢用 var ,或者新项目从一开始就约定好用 var ,那自然没问题。但如果在老项目里突然冒出一堆 var ,那肯定会有人不适应。 最好能和团队成员沟通,达成共识。

    至于我自己,其实我是比较倾向于在合适的时候用 var 的。毕竟,写代码嘛,既要保证代码质量,也要追求一点点简洁和优雅。当然,前提是不影响可读性和可维护性。 像有些朋友提到的,IDE 的自动补全和类型提示功能,确实能很大程度上缓解 var 带来的可读性问题。

    总之,var 这东西,用不用、怎么用,没有绝对的好坏,关键还是看具体情况和团队约定。 咱也不能一概而论地说“Java Boy”就是保守,对吧? 毕竟,大家都是为了写出更好的代码嘛!

    大家看我 ID !!!
    yazinnnn0
        104
    yazinnnn0  
       179 天前
    @JavasBoy
    某 java 前沿框架 quarkus 里啥风格的代码都有, 现在 quarkus 支持的最低版本是 17, 源码里还有一对 java 7 风格的代码(匿名内部类), 也用人提交偏 fp 风格的(var 类型推到, final 局部变量)




    匿名内部类和 var 出现在同一段代码里, 风格是不是很分裂?

    话说回来, quarkus 本来就衍生自 vertx, 而 vertx 有很强的 fp 思想, 能熟练编写 vertx 代码的 quarkus 贡献者为啥要手写匿名内部类, 这件事很奇怪
    billccn
        105
    billccn  
       179 天前
    @Sodacooky 我觉最好还是不要拿 C++的 auto 来比,因为写模板的时候很多中间值你都无法知道它类型是什么,如果不用 auto 就得声明一个新的类型参数,但有的时候又不能改变 API ,导致模板函数套模板函数,编译越来越慢。

    Java 的 var 这个就是可有可无,因为类型永远是清楚的。

    另外我觉得在 PR 里读到 var 很多的 Java 有点像读找不到实例的 C++模板,你只能靠变量名猜这代码是在干啥,至于对不对是完全无法确定。
    nilaoda
        106
    nilaoda  
       179 天前
    话说 Rider 写 C#的时候默认就会提示用 var 代替具体的类型声明……

    可能是 C#引入的早( 2007 年),加上 LINQ 和匿名类型的大量使用早就让 var 声明成了最佳实践吧。。而 Java 一直比较保守,到 Java 10 ( 2018 年)才支持了局部变量使用 var ,大部分开发者都不习惯使用。甚至有的编码规范里明确禁止使用 var 。

    可能是设计哲学和生态差异吧,Java 社区普遍认为显式类型更受信任,而 C#社区更容易接纳新的东西。
    Oxonomy
        107
    Oxonomy  
    OP
       179 天前
    @cubecube idea 支持快速拉 PR 并 checkout 到本地
    prosgtsr
        108
    prosgtsr  
       179 天前 via iPhone
    我最开始学 python ,后来写了几年写 java ,现在用 gdscript 都要写类型
    sagaxu
        109
    sagaxu  
       179 天前
    @cubecube 101# 原来如此,大厂都不方便在 IDE 中 review ,那自研 review 支持符号跳转查看定义吗。
    wxlwsy
        110
    wxlwsy  
       179 天前
    就像某类人写个三元表达式就卡布其"if else"一样
    码农就这样,一个无关紧要的语法都能讨论半天. 就像某碰瓷语言一样,少些几个字母就是"巨大飞跃".
    wxlwsy
        111
    wxlwsy  
       179 天前
    "卡布其"=看不起
    msg7086
        112
    msg7086  
       178 天前   ❤️ 1
    @nilaoda 同时在写 Java 和 C#的我(
    Java 上怎么繁琐怎么来,C#上怎么炫酷怎么来。看 Rider 疯狂帮我用新特性重构代码,一个难看的强制类型转换+属性非空判断硬生生帮我重写成了 pattern matching 。
    q13859601
        113
    q13859601  
       174 天前
    javaer var 非常方便,长类名场景提高了可读
    leatomic
        114
    leatomic  
       160 天前
    个人觉得 var 、val 、fun 这类真的鸡肋,我们的代码中不需要充斥着这些"冗余"信息,编程语言就可以理解为一种 DSL ,语法体现在那了。

    我们需要的是对齐,"var : Type"这种也不是不可以接受,最好还是 IDE 支持:
    1. 值/表达式.var 然后自动识别类型,光标先选中并定位在变量,然后再选中定位到类型,可以按 Tap 之类的跳过不需要修改的
    2. 选中一组变量,按快捷键自动对齐变量名

    还有,像访问修饰符,大多数情况下属性是需要封装起来的,默认应该是 private 级别,而不是 package 级别,这类默认项是值得优化的。
    1  2  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5299 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 08:37 · PVG 16:37 · LAX 01:37 · JFK 04:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.