wdwwtzy
V2EX  ›  Java

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

  •  
  •   wdwwtzy · Jul 30, 2020 · 14591 views
    This topic created in 2295 days ago, the information mentioned may be changed or developed.

    是推荐用还是禁止用啊?

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

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

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

    [去重新生成一次]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    最好解决方案就是上 kotlin 。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   953 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 150ms · UTC 19:20 · PVG 03:20 · LAX 11:20 · JFK 14:20
    ♥ Do have faith in what you're doing.