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

请教一下,大公司(BAT 级别的)对 lombok 有规定吗?

  •  
  •   wdwwtzy · 14 天前 · 8254 次点击

    是推荐用还是禁止用啊?

    93 条回复    2020-08-02 20:09:14 +08:00
    jzmws
        1
    jzmws   14 天前
    个人不推荐使用 , 只要你用了这个东西我也必须安装这个东西 (看代码就要配置 ide 了 ) , 第二点代码是给人看的,多一个 get/set 方法根本不影响 ,如果少了这个阅读不方便. 第三点这个不兼容,idea 2020 有个莫名其妙的 bug
    Reficul
        2
    Reficul   14 天前   ❤️ 33
    可能只有 Java Boy 觉得一堆 Getter/Setter/equal/hash 不影响阅读
    keshawnvan
        3
    keshawnvan   14 天前
    看部门吧,我们这边可以用。
    不过不推荐上来加个 @Data
    RyanArthur
        4
    RyanArthur   14 天前
    坐标美团,我们组是全员用的
    Mogugugugu
        5
    Mogugugugu   14 天前   ❤️ 1
    2020.2 升级后 卸载 Lombok 、重启 IDEA,然后重新安装 Lombok 之后就能用了。每次追新之后 看着项目一片红就脑阔疼...
    HangoX
        6
    HangoX   14 天前
    主要是插件不稳定,这点好蛋疼
    defage
        7
    defage   14 天前
    以前我也是不推荐用的。
    不过随着 lombok 插件的普及,基本上用 Java IDE 的都知道这么个东西了, 所以现在这个问题基本不存在了, 可以用起来了。
    duoglas
        8
    duoglas   14 天前   ❤️ 1
    不使用 一堆 Getter/Setter/equal/hash IDE 就能生成,不因为这种莫名其妙的理由强制扩散。
    qiyuey
        9
    qiyuey   14 天前   ❤️ 2
    上 Kotlin,不需要 lombok 了
    xuanbg
        10
    xuanbg   14 天前
    一般都禁止使用
    ChanKc
        11
    ChanKc   14 天前 via Android
    搭车问
    那些喜欢用 lombok 的是不是也很喜欢 JavaScript 的 object 的设计
    luhongfei66
        12
    luhongfei66   14 天前   ❤️ 6
    @Reficul 为什么一堆 Getter/Setter/equal/hash 会影响阅读呢? 你们是会把逻辑放到实体类进去吗?
    cco
        13
    cco   14 天前
    我们公司全员都在使用,即使是 IDE 也是 eclipse 和 idea,这两个都可以安装。目前还没遇到就是不装插件,就是不用的同事,基本上大多数入职都一直在用,没用过的也真香了。
    orangeD
        14
    orangeD   14 天前   ❤️ 1
    装个插件也就不到一分钟的事,自从用了 lombok 以后就离不开了,看见一大坨 getter/setter 就恶心。
    luckyrayyy
        15
    luckyrayyy   14 天前
    二线公司禁止,实体类都用 kotlin 写的。
    Sharuru
        16
    Sharuru   14 天前
    根据项目规范按需使用,通常来说没有特别要求的情况下可以使用,默认使用。
    但不推荐直接使用 Data 注解。
    cshijiel
        17
    cshijiel   14 天前
    阿里巴巴(菜鸟、淘宝某些业务),爱奇艺、美团很多部门都在用
    Reficul
        18
    Reficul   14 天前   ❤️ 2
    @luhongfei66

    10 个字段不到的类, 加上那一条龙就 200 行上去了。 每次加一个字段我还要眯着眼睛找到 tostring,equal,hash 去重新生成一次。

    要是不影响阅读体验,那为啥 Groovy / Kotlin 都自动生成这些方法? 说不影响阅读体验的,能这么想的也就 Java 土著了吧,所谓看惯了就好了,语言影响思维。
    luhongfei66
        19
    luhongfei66   14 天前   ❤️ 3
    @Reficul 你的 toString,equal,hash 全都是手动修改,而不是自动生成的吗?这种是活该你眯着眼睛找啊,不会用工具要学啊。自动生成只是为了不影响阅读吗?不是更大的是为了省事吗?主次都分不清,别自己立个靶子在那打,学会点思考,好吗?
    Reficul
        20
    Reficul   14 天前   ❤️ 4
    @luhongfei66

    [去重新生成一次]

    看来 Java 确实废眼,趁早治疗好吗?
    cjlmwcy
        21
    cjlmwcy   14 天前   ❤️ 1
    @luhongfei66 老哥, @Reficul 说的是自动生成后,字段修改了要重新生成
    luhe
        22
    luhe   14 天前
    @Reficul 你先生成 tostring,equal,hash 是不是就解决了...
    cubecube
        23
    cubecube   14 天前
    看小团队 leader 品味了。个人不太喜欢,不过项目在用。
    这个东西最主要的就是扩散了,一人用,全部都用。
    Reficul
        24
    Reficul   14 天前   ❤️ 1
    @luhe 诶,没太懂,能具体说说咩
    Jooooooooo
        25
    Jooooooooo   14 天前   ❤️ 1
    看部门, 我们不用

    运行的东西和你在 idea 里面看见的东西不一样

    而且看不出来 lombok 带来的好处是什么
    harde
        26
    harde   14 天前
    以前互黑好歹是语言互黑,现在发展到连个插件、库都能开始互黑了么?
    DebugTy
        27
    DebugTy   14 天前
    lombok 挺好用的自带的 builder 注解真香, 吐槽装插件的大可不必
    Boyce
        28
    Boyce   14 天前
    @DebugTy +1 。
    VS 写 C#时,写一个 @ builder 注解就能搞定的东西写得我头皮发麻。
    Umenezumi
        29
    Umenezumi   14 天前
    可以用 但是不要无脑用 @Data
    luhongfei66
        30
    luhongfei66   14 天前
    @Reficul ctrl + f 是搜索功能,会用吗?眯咪眼?
    Reficul
        31
    Reficul   14 天前
    @luhongfei66

    我很好奇你是咋晓得我不会搜索,但是整个贴的人的确都知道你眼神不好。
    luhongfei66
        32
    luhongfei66   14 天前   ❤️ 1
    @Reficul 咪咪眼需要眯着眼来找,这还用说吗,去学习下怎么使用工具,咪咪眼?
    supermoonie
        33
    supermoonie   14 天前 via iPhone
    业务项目可用,核心以及公共项目禁用
    Reficul
        34
    Reficul   14 天前
    @luhongfei66

    人生攻击、无能狂怒? 你开心就好。

    BTW:
    给路过这个帖子的人推荐一个油🐒脚本,希望能帮到一些人: https://www.v2ex.com/t/596604
    luhongfei66
        35
    luhongfei66   14 天前   ❤️ 1
    @Reficul 抱歉,原来重复你的话来说对你是一种人生(身)攻击,没想到那话是你的自嘲,是我没眼力见了,不会拉黑你的,这么有趣的人,希望能看到多点你的名言
    bigbigeggs
        36
    bigbigeggs   13 天前
    不给用。有的时候 toString 有很多敏感信息,需要加密才能打印日志
    talen666
        37
    talen666   13 天前
    用了真香,新增字段,也不用去生成 Set Get 方法了
    echo1937
        38
    echo1937   13 天前
    @bigbigeggs #36 你单独重载一个 toString 不就好了
    monkeyk
        39
    monkeyk   13 天前   ❤️ 1
    阿里研发是不允许使用的
    mio4
        40
    mio4   13 天前
    pdd 在用
    wiix
        41
    wiix   13 天前   ❤️ 5
    实践中没发现省了多少功夫,反倒是引来了不少坑。
    getter,setter 有快捷键。
    tostring 有父类 tostringbuilder,极少数需要定制的 lombok 也帮不上忙。
    equal 、hash 一般也用不上,用到时不是有 id 么?自动生成的一是很可能性能差,二是正确性信不过。
    而且 lombok 会带来种种潜在的继承问题,还有跟一些依赖序列化的框架有说不清的冲突……
    最搞笑的是有人老是拿修改属性名称时有 lombok 会会很方便:
    不想写 pojo 里的 getset,能省的了重写调用里面的 getset 吗? repository 里的方法名、 @query 、xml 里 sql 中的名名能跟着变吗?然而这些才是修改 /重构时的重头戏,pojo 类里的反倒不值一提……

    当然,如果你写的项目简简单单的用个 @Data 就能解决问题,上面的当我没说。
    movistar
        42
    movistar   13 天前   ❤️ 1
    @Reficul 不,还有 Golang Boy
    毕竟全靠代码生成,连动态代理都没有
    kilen3a
        43
    kilen3a   13 天前
    @luckyrayyy 那么这比用 lombok 强多了,看着 IDE 的提示就烦
    kilen3a
        44
    kilen3a   13 天前
    @monkeyk 只是你们部门吧,我们整体大部门都用
    WebKit
        45
    WebKit   13 天前 via Android   ❤️ 1
    @Reficul 你为什么要阅读实体类呢。。。
    laike9m
        46
    laike9m   13 天前
    为什么不试试 AutoValue 呢?
    https://www.baeldung.com/introduction-to-autovalue
    mreasonyang
        47
    mreasonyang   13 天前 via iPhone   ❤️ 1
    @laike9m 机制不一样,lombok 是直接魔改原字节码,所以比 AutoValue 这类生成新 class 的方案使用起来更方便
    nicevar
        48
    nicevar   13 天前
    见过很多公司用,没有什么不好的,我就很反感用什么 getter/setter 快捷键,需要多余操作,生成一堆碍眼的代码,还不如用 Kotlin
    Qlccks2
        49
    Qlccks2   13 天前 via iPhone
    前段时间一些公众号集中发不要使用 Lombok 。有一个问题不解,说没有 get/set 影响阅读,关键是 get/set 有什么可读的?
    Mirage09
        50
    Mirage09   13 天前 via iPhone
    在用,而且是 IntelliJ IDEA setup 的基本操作。
    hxy91819
        51
    hxy91819   13 天前   ❤️ 1
    通常都是无脑加这五个,不管怎么评价,在我们团队里确实大大提高了效率。

    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    lpgph
        52
    lpgph   13 天前
    @luhongfei66 业务逻辑确实放到 DO 中了 现在微服务基本上会考虑 DDD CQRS 纯粹贫血模式不用考虑那么多 随便都可以 但是内容多了就得考虑代码整洁方便阅读 这时候要么切换 kotlin 要么上 lombok 比较好些
    hxy91819
        53
    hxy91819   13 天前
    特别是 @Builder,真心好用,最烦一堆 set 了。
    vcode
        54
    vcode   13 天前
    还有人不用????恐怖如斯
    la2la
        55
    la2la   13 天前
    不是 Leader 的感觉不用关心这个,公司大家用,自己就用,大家不用就不用呗。要是自己负责一个独立的项目,那就看自己习惯呗。但是前提使使用前对 lombok 常见的使用技巧和坑有清醒的认识
    victorywangzhcn
        56
    victorywangzhcn   13 天前   ❤️ 1
    @monkeyk 你是阿里哪个部门?淘系表示没有这个要求
    ph228228
        57
    ph228228   13 天前
    一堆 get/set 看着就烦,代码简洁点不好吗
    alexzsh
        58
    alexzsh   13 天前
    @victorywangzhcn 淘系没有+1
    fcten
        59
    fcten   13 天前
    淘系在用。说不上推荐但是只要有人用了你就不能不用。。。
    Kilerd
        60
    Kilerd   13 天前
    可能也就那种以代码行数为 KPI 的人才会拥护不使用 Lombok 这东西吧
    aragakiyuii
        61
    aragakiyuii   13 天前
    这种不都是看 leader 嘛。。反正是要用的话就都得用
    Reficul
        62
    Reficul   13 天前
    @movistar

    Go 辣鸡是辣鸡,不过比起 Java 那堆还是好点吧。代码生成只要在提交前重新执行一下生成命令就行,也可以在 CI 的时候重新生成一次。
    Reficul
        63
    Reficul   13 天前
    @WebKit

    不是专业写 Java 的,不好评价代码质量。 主要是接手的遗产项目会有一些这样的代码。
    tairan2006
        64
    tairan2006   13 天前
    @hxy91819 builder 坑很多啊,用 Accessor 不好么
    joyhub2140
        65
    joyhub2140   13 天前
    公司的项目,我不反对用 Lombok,毕竟对效率有那么一丁点的提升,但是我自己的项目,绝对不用,这是个人选择哈。
    luhongfei66
        66
    luhongfei66   13 天前
    @lpgph 嗯,能真正落地 DDD 的是会影响大些
    yamasa
        67
    yamasa   13 天前
    除非是业务上真的很难实现,个人真的很讨厌搞一堆 setter 到处调。又丑又容易把状态搞乱,宁愿多写几个 constructor 或者次之 builder,然后 tm 老老实实的给我 immutable 吧。
    Renco
        68
    Renco   13 天前
    为什么不能无脑用 @Data 有大佬可以解释下么。
    CoderGeek
        69
    CoderGeek   13 天前
    组内统一 用啥就行
    guagusi
        70
    guagusi   13 天前
    @luhongfei66 贫血跟充血了解一下,领域模型再了解一下
    672795574
        71
    672795574   13 天前
    @Reficul Java 废眼,可能是被黑的最惨的一次。。
    hecz
        72
    hecz   13 天前
    @Reficul 无非写代码和读代码方式而已,又能有多少效率上的差别呢。还有就是针对语言进行评论我觉得不太友好
    yamasa
        73
    yamasa   13 天前
    @Renco @data == @getter@setter. 和 idea 给你 gen 所有变量的 getter setter 没区别。很烂的是无脑上 setter 这种习惯,很多 dto 和 pojo 或者所有 field,或者部分 field 本质就是 immutable 的,根本不需要改也不应该被允许改,还是给搞上 setter,这就是无脑。写个几年程序都应该能理解维护复杂状态的痛,也能理解 fp 为什么在算力不断升级的现在越来越受欢迎。
    leeUp
        74
    leeUp   13 天前
    java 土著,java 废眼,这地图炮开的的🙄
    122006
        75
    122006   13 天前
    其实最好有个插件能把 setget 方法隐藏起来就好了
    lxk11153
        76
    lxk11153   13 天前
    @wiix #41 "tostring 有父类 tostringbuilder" 是啥?
    Reficul
        77
    Reficul   12 天前
    @hecz

    同意你说的后半句,攻击语言的评论的确是不友好(除了对楼上那个老哥的攻击我不抱有任何抱歉以外),但是我不同意你说的前半句。

    冗余就是不好的,简单比复杂好。2L 的吐槽来自生活,除了原生写 Java/还处在对内存失控恐惧中那些 Cpp 转 Java 的人,接手 Java 项目不被困扰的。退一万步说,可能 Lombok 是有传染的问题,但是这只是说明这个解决问题的方案不够好,不代表这个问题不存在。

    另外我对团队要不要用 Lombok 的态度是中立的。因为这是仁者见仁的东西,嗓门大的规则定好了就定好了没啥好说的,我接手的项目就不让用,那就不用呗。 但是,要我定规则,那就是用 Lombok 或者上 Kotlin 。
    Reficul
        78
    Reficul   12 天前
    fix typo:

    “接手 Java 项目不被困扰的” -> “接手 Java 项目(没有)不被困扰的”
    zzl22100048
        79
    zzl22100048   12 天前 via iPhone
    lombok 用之前还是要有规范的,总会有人把这个依赖放 complie,用 provided 的话不会扩散
    lightingtime
        80
    lightingtime   12 天前
    用的理由是方便开发,不用的理由是啥?想单独定制的就单独拿出来写就好了啊,类上写好注释还方便维护。
    wiix
        81
    wiix   12 天前
    @lxk11153 org.apache.commons.lang3.builder.ToStringBuilder
    commons lang 里的一个工具。
    lxk11153
        82
    lxk11153   12 天前
    @wiix #81 你说父类,我以为要继承它。[doge]
    jorneyr
        83
    jorneyr   12 天前
    我曾经有一个表单,使用的 Bean 已经有 50 多个属性了 (都是 getter, setter 访问,有的 setter 还有手写的逻辑),由于是遗留项目,只好在原来的 Bean 上增加新的属性,有一次增加了一个属性,忘了写 getter setter,导致怎么测试都不对,最后搞了半天才发现忘记 getter setter 了,那以后新项目都推荐使用 Lombok 了,代码简洁,尽量避免低级错误吧。

    使用 Lombok 的缺点无非就是 IDE 里需要安装插件,几分钟的事而已,但也不能滥用,我们只允许使用 @Getter @Setter 注解,@ToString 尽量不用,测试输出时使用 Utils.toJson(xxx) 好了。
    aguesuka
        84
    aguesuka   12 天前
    就我个人而言,如果是为了省几行代码,直接上 java14 或者 kotlin 更好
    blless
        85
    blless   12 天前 via Android
    🌚虽然我不是 java 仔,但是我似乎已经看见一条 java 的分裂路线了
    ganning
        86
    ganning   12 天前
    使用 lombok 也没有禁止生成 /使用 get/set 。。。。就看个人风格还是团队风格了。
    iweisi
        87
    iweisi   12 天前   ❤️ 1
    一个 get set 都吵,这么在乎细节,看来项目质量肯定很棒哦
    MakHoCheung
        88
    MakHoCheung   12 天前 via iPhone   ❤️ 2
    我是菜鸡,我用 public
    cheng6563
        89
    cheng6563   12 天前 via Android
    其实挺方案这种直接改语法的插件的,但无奈 getter setter 太臭了
    iyangyuan
        90
    iyangyuan   12 天前 via iPhone
    多一事不如少一事,不用不会出问题,用了可能会出问题
    andj4cn
        91
    andj4cn   11 天前
    我之前也不用,后来团队有人开始用了,就跟着用。其实 @Getter @Setter 这些注解确实省不少事,让纯 Java 项目实体类代码少一点。这个主要看内部项目推进用了没,用了就用,要达成共识。
    hecz
        92
    hecz   11 天前
    @Reficul 你说的定规则的观点我同意,这种东西要么就全用,要么就全都不用,定完规则按照规则走就行。简单当然比复杂好,但是还是得看场景的,比如之前的 beanUtils 类,试用起来确实方便,但是也会新增一些性能问题
    yuekcc
        93
    yuekcc   10 天前
    曾经在一个项目上用过,代码确实整洁了。但是后面全部改回手写的 getter/setter 了,原因就是这东西不是所有人能接受。而且还得手工安装一个插件。团队小还好,最多就是多安排几次培训。这样想来成本也不低,如果人员流动大的话,就不是一两次培训能解决的了。而且 idea 这种 ide 按个快捷键就能生成 getter 、setter 了,可以解决不少的手写 getter 、setter 场景。

    最好解决方案就是上 kotlin 。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2957 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 11:48 · PVG 19:48 · LAX 04:48 · JFK 07:48
    ♥ Do have faith in what you're doing.