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

Java -10-var, lombok.var 有什么问题吗?公司不让用

  •  
  •   JinTianYi456 · 2023-03-18 22:31:20 +08:00 · 3889 次点击
    这是一个创建于 620 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不懂。通常我只在泛型的地方用,减少<输入

    33 条回复    2023-03-20 14:21:30 +08:00
    pelloz
        1
    pelloz  
       2023-03-18 22:38:50 +08:00
    公司写的代码是需要大家一起看一起改的,不直观的东西不让用很正常。省你一秒的输入,浪费每个看你代码的人一秒时间肯定是不划算的。
    JinTianYi456
        2
    JinTianYi456  
    OP
       2023-03-18 22:43:34 +08:00
    @pelloz #1 如果是 IDEA 有 File | Settings | Editor | Inlay Hints, 里面有个开关, 默认是开启的
    DGideas
        3
    DGideas  
       2023-03-18 22:44:04 +08:00
    Java 10 引入的 var 关键字和 Lombok 的 var 注解都是用来简化代码的工具。它们可以帮助程序员省略类型声明,从而让代码更加简洁易读。

    然而,这些工具也可能会带来一些问题。例如,如果你过度使用 var 关键字,可能会导致代码变得难以阅读和理解。另外,使用 var 也可能会隐藏变量的实际类型,这可能会影响代码的可维护性和可读性。

    一些公司可能不允许使用 var 关键字和 Lombok 的 var 注解,是因为它们希望代码保持一致性和可读性,并避免潜在的问题。因此,最好遵循公司的规定,避免使用可能引起争议的代码风格。
    Mrag
        4
    Mrag  
       2023-03-18 23:39:50 +08:00
    公司不让用你也没办法
    PVXLL
        5
    PVXLL  
       2023-03-19 00:21:21 +08:00 via iPhone
    var val let 看习惯了就好,谁没事天天盯着类型看
    Leviathann
        6
    Leviathann  
       2023-03-19 00:31:02 +08:00
    没有,遗老的问题
    IvanLi127
        7
    IvanLi127  
       2023-03-19 00:48:00 +08:00 via Android
    我感觉,这种事情最好直接换语言。有效避免撕逼。。。当然,大概率会慢慢遇到新的问题,然后再换🤣
    Rocketer
        8
    Rocketer  
       2023-03-19 00:55:15 +08:00 via iPhone   ❤️ 4
    C#早就支持 var 了,但我见过的公司都不让用。

    当初从 js 进化到 ts 不就是为了解决类型混乱的问题吗?不知道这到底是在折腾啥?
    bitmin
        9
    bitmin  
       2023-03-19 02:03:44 +08:00
    我喜欢用 var ,写的时候变量名左对齐看起来更工整而且省事,重构也方便。

    阅读的时候非常直观,IDEA 会自动显示实际类型不影响阅读。要是不使用 IDEA 开发则无话可说,比 Java 项目不使用 Spring 更少见。
    WebKit
        10
    WebKit  
       2023-03-19 02:31:53 +08:00 via Android
    说影响阅读的应该是没用过的把。var 影响阅读。那 Kotlin 这种岂不是根本不应该存在的东西? IDE 已经非常成熟了。直接用文本打开也是能看懂。
    dcsuibian
        11
    dcsuibian  
       2023-03-19 03:09:28 +08:00   ❤️ 1
    传统写法:Deque<T> queue=new LinkedList<>();
    var 写法:var queue=new LinkedList<T>();
    在后者的写法中,var 推断出了 LinkedList<T>类型,具体到了实现类。若不小心调用了子类特有的方法,就违反了依赖倒置原则。
    另外,如果变量名不是 queue 的话,也可能会被别人误认为你想以传统的 List<T>方法使用。
    相对来说,var 确实会降低其清晰度。

    如果是需要长期维护或给别人看的代码,我个人会倾向于不使用 var ,而一次性代码就随意了。

    不过综合来说,其实影响也不大,毕竟 var 只能用在局部方法里。
    公司规定有时候可能就是没什么道理的,但为了代码风格的统一,还是要优先遵守。
    EscYezi
        12
    EscYezi  
       2023-03-19 03:15:02 +08:00 via Android
    懒得输类型可以先写表达式然后接 .var 自动补全类型 XD
    wupher
        13
    wupher  
       2023-03-19 09:17:31 +08:00
    不愿意学习新技术?

    我用 Kotlin ,val, var 从开始即如此。
    wxlwsy
        14
    wxlwsy  
       2023-03-19 10:08:08 +08:00 via iPhone
    var 关键字没啥问题,但我反对 loombok
    xiaofan305
        15
    xiaofan305  
       2023-03-19 10:14:08 +08:00 via Android
    @Livid 3# chatgpt ?
    cheng6563
        16
    cheng6563  
       2023-03-19 10:20:10 +08:00
    从来都是 ctrl+alt+v 生成变量申明,换用 Java17 了也基本没用过 var
    lombok 是一言难尽,好用是非常好用,侵入性也非常大。
    FozillaMox
        17
    FozillaMox  
       2023-03-19 10:44:47 +08:00 via iPhone
    @DGideas 你这样不太好吧
    zhuangzhuang1988
        18
    zhuangzhuang1988  
       2023-03-19 10:58:21 +08:00   ❤️ 1
    c#,scala,c++,Kotlin ,ts 都在用。
    rus4db
        19
    rus4db  
       2023-03-19 11:01:51 +08:00
    Java 10 的 var 关键字是一种类型推断特性,它可以在局部变量初始化时自动推断其数据类型。这个特性可以减少冗余代码,提高程序的可读性和开发效率。但是它并不是完全没有问题。以下是一些可能的问题:
    - 可读性和可维护性。在某些情况下,显示声明变量的数据类型可能更加清晰和易于理解。此外,当数据类型推导不清晰或者程序员不理解类型推断过程的规则时会出现问题。
    - 调试。当程序出现错误时,使用 var 关键字可能会使调试过程更加困难,因为程序员可能需要手动推断变量的数据类型。
    - 兼容性。Java 10 是较新的版本,不是所有的机器都能支持,如果要在旧版 Java 上运行,则需要进行一些兼容性处理。

    Lombok 的 var 关键字可以自动生成 getter 和 setter 方法,从而减少了冗余代码的数量。然而,它也可能会导致以下问题:
    - 可读性和可维护性。像 Java10 那样,它可能会使代码更难阅读和理解,也可能会造成维护问题。
    - 兼容性。与 Java10 的 var 关键字相同,使用 lombok.var 也需要在较新的 Java 版本中才能使用。
    对于公司不允许使用 var 关键字的情况,可能是为了保持代码一致性和可维护性。在这种情况下,最好遵守公司规定,重视代码的可读性和易于维护性。
    hhjswf
        20
    hhjswf  
       2023-03-19 11:32:05 +08:00 via Android
    @Livid 19L 怀疑是 gpt 回复
    UnknownDomain
        21
    UnknownDomain  
       2023-03-19 12:25:35 +08:00 via Android
    @hhjswf 感觉 3 楼也是 gpt
    roundgis
        22
    roundgis  
       2023-03-19 12:59:01 +08:00 via Android
    Dotnet 3.5 就存在的東西

    Dotnet3.5 好像是 08 年發行的

    var 只能用在 local variable

    除非一個方法寫幾萬行 不然怎麼會影響可讀性

    當然以前的屎山代碼的確有一個方法過萬行的

    不過那種是鐵了心不升級的也用不了 var
    iseki
        23
    iseki  
       2023-03-19 13:01:54 +08:00
    var 主要是有点弱,只能在局部变量用,但是我觉得不该不许用。lombok 这东西还是别用了,你一用所有人都得跟着用,而且还不是个第一方的东西,不太好
    onikage
        24
    onikage  
       2023-03-19 22:22:19 +08:00
    一行 var 就认为是新技术的也是浅薄的不行.
    ljrdxs
        25
    ljrdxs  
       2023-03-19 22:50:06 +08:00
    @Rocketer 不用 var ,写 LINQ 时很难设置类型。
    泛型可能套几层嘞。
    其他场景,暂时想不到弊端。
    xiaocaiji111
        26
    xiaocaiji111  
       2023-03-19 23:12:01 +08:00
    比如一个函数返回值是用 var
    var var1 = func1();
    然后后面又有一个函数调用使用了 var
    var var2 = func2(var1);

    这时候不点进去函数的实现根本不知道返回的类型,参数类型是什么。
    Livid
        27
    Livid  
    MOD
       2023-03-20 04:44:11 +08:00
    @FozillaMox
    @hhjswf
    @UnknownDomain

    3 楼 @DGideas 因为连续使用 AI 回复,账号已经被彻底 ban 。如果想看处理过程可以看这里:

    https://www.v2ex.com/t/925157
    acctv2
        28
    acctv2  
       2023-03-20 08:13:36 +08:00 via Android
    @Rocketer var 跟类型系统没啥太大关系 纯语法糖
    litchinn
        29
    litchinn  
       2023-03-20 08:46:09 +08:00
    用不用 var 在我看来不是和 4 个空格缩进,2 个空格缩进一样属于代码规范问题吗,既然是规范问题按照公司规范来呗
    fiveStarLaoliang
        30
    fiveStarLaoliang  
       2023-03-20 10:31:22 +08:00
    我用 var 主要是能直接类型推断出来的地方用, 有些函数返回的地方我就不用, 因为我觉得这些地方用确定类型反而对理解代码更好, 真的没必要非黑即白的二极管思维
    hihanley
        31
    hihanley  
       2023-03-20 11:18:05 +08:00   ❤️ 1
    @Livid 19 楼疑似使用 AI 回复
    chendy
        32
    chendy  
       2023-03-20 11:19:30 +08:00
    曾经多年前在项目里大量使用过 lombok 的 val
    写得挺爽,后续维护开始坐牢,本来可以直接看到类型,用了 val 之后还要点进方法看一眼返回值类型
    虽然从‘优雅’的角度来说,应该关心方法返回的东西不用关心类型,但是从开发维护的角度来看,还是直接看到类型比较方便

    顺便一说其实 idea 的 .var 其实就够用了,不用自己手打类型
    th00000
        33
    th00000  
       2023-03-20 14:21:30 +08:00
    @DGideas #3 这是 AI 回复的吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1434 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:20 · PVG 01:20 · LAX 09:20 · JFK 12:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.