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

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

  •  
  •   wdwwtzy · 2020-07-30 13:40:01 +08:00 · 12799 次点击
    这是一个创建于 1581 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是推荐用还是禁止用啊?

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

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

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

    [去重新生成一次]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    最好解决方案就是上 kotlin 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5373 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 08:17 · PVG 16:17 · LAX 00:17 · JFK 03:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.