是推荐用还是禁止用啊?
1 jzmws 2020-07-30 13:48:04 +08:00 个人不推荐使用 , 只要你用了这个东西我也必须安装这个东西 (看代码就要配置 ide 了 ) , 第二点代码是给人看的,多一个 get/set 方法根本不影响 ,如果少了这个阅读不方便. 第三点这个不兼容,idea 2020 有个莫名其妙的 bug |
![]() | 2 Reficul 2020-07-30 13:54:15 +08:00 ![]() 可能只有 Java Boy 觉得一堆 Getter/Setter/equal/hash 不影响阅读 |
3 keshawnvan 2020-07-30 14:01:12 +08:00 看部门吧,我们这边可以用。 不过不推荐上来加个 @Data |
![]() | 4 RyanArthur 2020-07-30 14:01:35 +08:00 坐标美团,我们组是全员用的 |
![]() | 5 Mogugugugu 2020-07-30 14:03:29 +08:00 ![]() 2020.2 升级后 卸载 Lombok 、重启 IDEA,然后重新安装 Lombok 之后就能用了。每次追新之后 看着项目一片红就脑阔疼... |
6 HangoX 2020-07-30 14:05:07 +08:00 主要是插件不稳定,这点好蛋疼 |
![]() | 7 defage 2020-07-30 14:05:29 +08:00 以前我也是不推荐用的。 不过随着 lombok 插件的普及,基本上用 Java IDE 的都知道这么个东西了, 所以现在这个问题基本不存在了, 可以用起来了。 |
![]() | 8 duoglas 2020-07-30 14:10:07 +08:00 ![]() 不使用 一堆 Getter/Setter/equal/hash IDE 就能生成,不因为这种莫名其妙的理由强制扩散。 |
![]() | 9 qiyuey 2020-07-30 14:30:55 +08:00 ![]() 上 Kotlin,不需要 lombok 了 |
![]() | 10 xuanbg 2020-07-30 14:41:20 +08:00 一般都禁止使用 |
11 ChanKc 2020-07-30 14:41:52 +08:00 via Android 搭车问 那些喜欢用 lombok 的是不是也很喜欢 Javascript 的 object 的设计 |
12 luhongfei66 2020-07-30 14:49:21 +08:00 ![]() @Reficul 为什么一堆 Getter/Setter/equal/hash 会影响阅读呢? 你们是会把逻辑放到实体类进去吗? |
![]() | 13 cco 2020-07-30 14:50:41 +08:00 我们公司全员都在使用,即使是 IDE 也是 eclipse 和 idea,这两个都可以安装。目前还没遇到就是不装插件,就是不用的同事,基本上大多数入职都一直在用,没用过的也真香了。 |
14 orangeD 2020-07-30 15:04:31 +08:00 ![]() 装个插件也就不到一分钟的事,自从用了 lombok 以后就离不开了,看见一大坨 getter/setter 就恶心。 |
![]() | 15 luckyrayyy 2020-07-30 15:05:34 +08:00 二线公司禁止,实体类都用 kotlin 写的。 |
16 Sharuru 2020-07-30 15:07:58 +08:00 根据项目规范按需使用,通常来说没有特别要求的情况下可以使用,默认使用。 但不推荐直接使用 Data 注解。 |
![]() | 17 gwybiaim 2020-07-30 15:13:10 +08:00 阿里巴巴(菜鸟、淘宝某些业务),爱奇艺、美团很多部门都在用 |
![]() | 18 Reficul 2020-07-30 15:56:36 +08:00 ![]() @luhongfei66 10 个字段不到的类, 加上那一条龙就 200 行上去了。 每次加一个字段我还要眯着眼睛找到 tostring,equal,hash 去重新生成一次。 要是不影响阅读体验,那为啥 Groovy / Kotlin 都自动生成这些方法? 说不影响阅读体验的,能这么想的也就 Java 土著了吧,所谓看惯了就好了,语言影响思维。 |
19 luhongfei66 2020-07-30 16:16:04 +08:00 ![]() @Reficul 你的 toString,equal,hash 全都是手动修改,而不是自动生成的吗?这种是活该你眯着眼睛找啊,不会用工具要学啊。自动生成只是为了不影响阅读吗?不是更大的是为了省事吗?主次都分不清,别自己立个靶子在那打,学会点思考,好吗? |
![]() | 20 Reficul 2020-07-30 16:28:45 +08:00 ![]() |
![]() | 21 cjlmwcy 2020-07-30 16:28:56 +08:00 ![]() @luhongfei66 老哥, @Reficul 说的是自动生成后,字段修改了要重新生成 |
![]() | 23 cubecube 2020-07-30 16:49:22 +08:00 看小团队 leader 品味了。个人不太喜欢,不过项目在用。 这个东西最主要的就是扩散了,一人用,全部都用。 |
25 Jooooooooo 2020-07-30 16:52:04 +08:00 ![]() 看部门, 我们不用 运行的东西和你在 idea 里面看见的东西不一样 而且看不出来 lombok 带来的好处是什么 |
![]() | 26 harde 2020-07-30 16:57:18 +08:00 以前互黑好歹是语言互黑,现在发展到连个插件、库都能开始互黑了么? |
27 DebugTy 2020-07-30 17:01:14 +08:00 lombok 挺好用的自带的 builder 注解真香, 吐槽装插件的大可不必 |
30 luhongfei66 2020-07-30 18:04:27 +08:00 @Reficul ctrl + f 是搜索功能,会用吗?眯咪眼? |
![]() | 31 Reficul 2020-07-30 18:23:22 +08:00 |
32 luhongfei66 2020-07-30 18:27:26 +08:00 ![]() @Reficul 咪咪眼需要眯着眼来找,这还用说吗,去学习下怎么使用工具,咪咪眼? |
33 supermoonie 2020-07-30 18:33:08 +08:00 via iPhone 业务项目可用,核心以及公共项目禁用 |
![]() | 34 Reficul 2020-07-30 18:34:14 +08:00 |
35 luhongfei66 2020-07-30 18:37:53 +08:00 ![]() @Reficul 抱歉,原来重复你的话来说对你是一种人生(身)攻击,没想到那话是你的自嘲,是我没眼力见了,不会拉黑你的,这么有趣的人,希望能看到多点你的名言 |
36 bigbigeggs 2020-07-30 20:48:36 +08:00 不给用。有的时候 toString 有很多敏感信息,需要加密才能打印日志 |
![]() | 37 talen666 2020-07-30 20:56:08 +08:00 用了真香,新增字段,也不用去生成 Set Get 方法了 |
![]() | 38 echo1937 2020-07-30 21:25:34 +08:00 @bigbigeggs #36 你单独重载一个 toString 不就好了 |
![]() | 39 monkeyk 2020-07-30 23:21:45 +08:00 ![]() 阿里研发是不允许使用的 |
![]() | 40 mio4 2020-07-30 23:23:45 +08:00 pdd 在用 |
41 wiix 2020-07-30 23:56:42 +08:00 ![]() 实践中没发现省了多少功夫,反倒是引来了不少坑。 getter,setter 有快捷键。 tostring 有父类 tostringbuilder,极少数需要定制的 lombok 也帮不上忙。 equal 、hash 一般也用不上,用到时不是有 id 么?自动生成的一是很可能性能差,二是正确性信不过。 而且 lombok 会带来种种潜在的继承问题,还有跟一些依赖序列化的框架有说不清的冲突…… 最搞笑的是有人老是拿修改属性名称时有 lombok 会会很方便: 不想写 pojo 里的 getset,能省的了重写调用里面的 getset 吗? repository 里的方法名、 @query 、xml 里 sql 中的名名能跟着变吗?然而这些才是修改 /重构时的重头戏,pojo 类里的反倒不值一提…… 当然,如果你写的项目简简单单的用个 @Data 就能解决问题,上面的当我没说。 |
43 kilen3a 2020-07-31 00:53:08 +08:00 @luckyrayyy 那么这比用 lombok 强多了,看着 IDE 的提示就烦 |
46 laike9m 2020-07-31 02:21:38 +08:00 为什么不试试 AutoValue 呢? https://www.baeldung.com/introduction-to-autovalue |
![]() | 47 mreasonyang 2020-07-31 02:43:15 +08:00 via iPhone ![]() @laike9m 机制不一样,lombok 是直接魔改原字节码,所以比 AutoValue 这类生成新 class 的方案使用起来更方便 |
48 nicevar 2020-07-31 08:05:58 +08:00 见过很多公司用,没有什么不好的,我就很反感用什么 getter/setter 快捷键,需要多余操作,生成一堆碍眼的代码,还不如用 Kotlin |
![]() | 49 Qlccks2 2020-07-31 08:30:43 +08:00 via iPhone 前段时间一些公众号集中发不要使用 Lombok 。有一个问题不解,说没有 get/set 影响阅读,关键是 get/set 有什么可读的? |
![]() | 50 NVDA 2020-07-31 08:34:21 +08:00 via iPhone 在用,而且是 IntelliJ IDEA setup 的本操作。 |
![]() | 51 hxy91819 2020-07-31 09:25:58 +08:00 ![]() |
52 lpgph 2020-07-31 09:26:09 +08:00 @luhongfei66 业务逻辑确实放到 DO 中了 现在微服务基本上会考虑 DDD CQRS 纯粹贫血模式不用考虑那么多 随便都可以 但是内容多了就得考虑代码整洁方便阅读 这时候要么切换 kotlin 要么上 lombok 比较好些 |
![]() | 54 vcode 2020-07-31 09:35:47 +08:00 还有人不用????恐怖如斯 |
![]() | 55 la2la 2020-07-31 09:39:34 +08:00 不是 Leader 的感觉不用关心这个,公司大家用,自己就用,大家不用就不用呗。要是自己负责一个独立的项目,那就看自己习惯呗。但是前提使使用前对 lombok 常见的使用技巧和坑有清醒的认识 |
![]() | 56 victorywangzhcn 2020-07-31 09:44:23 +08:00 ![]() @monkeyk 你是阿里哪个部门?淘系表示没有这个要求 |
57 ph228228 2020-07-31 10:07:54 +08:00 一堆 get/set 看着就烦,代码简洁点不好吗 |
![]() | 58 alexzsh 2020-07-31 10:11:22 +08:00 @victorywangzhcn 淘系没有+1 |
![]() | 59 fcten 2020-07-31 10:31:02 +08:00 淘系在用。说不上推荐但是只要有人用了你就不能不用。。。 |
![]() | 60 Kilerd 2020-07-31 10:31:38 +08:00 可能也就那种以代码行数为 KPI 的人才会拥护不使用 Lombok 这东西吧 |
![]() | 61 aragakiyuii 2020-07-31 10:39:05 +08:00 这种不都是看 leader 嘛。。反正是要用的话就都得用 |
![]() | 62 Reficul 2020-07-31 10:57:33 +08:00 |
64 tairan2006 2020-07-31 11:05:09 +08:00 @hxy91819 builder 坑很多啊,用 Accessor 不好么 |
![]() | 65 nxforce 2020-07-31 11:10:32 +08:00 公司的项目,我不反对用 Lombok,毕竟对效率有那么一丁点的提升,但是我自己的项目,绝对不用,这是个人选择哈。 |
66 luhongfei66 2020-07-31 11:12:14 +08:00 @lpgph 嗯,能真正落地 DDD 的是会影响大些 |
67 yamasa 2020-07-31 11:28:41 +08:00 除非是业务上真的很难实现,个人真的很讨厌搞一堆 setter 到处调。又丑又容易把状态搞乱,宁愿多写几个 constructor 或者次之 builder,然后 tm 老老实实的给我 immutable 吧。 |
![]() | 69 CoderGeek 2020-07-31 11:38:11 +08:00 组内统一 用啥就行 |
70 guagusi 2020-07-31 12:04:19 +08:00 @luhongfei66 贫血跟充血了解一下,领域模型再了解一下 |
73 yamasa 2020-07-31 17:24:01 +08:00 |
![]() | 74 leeUp 2020-07-31 19:14:40 +08:00 java 土著,java 废眼,这地图炮开的的 |
75 122006 2020-07-31 19:24:19 +08:00 其实最好有个插件能把 setget 方法隐藏起来就好了 |
![]() | 77 Reficul 2020-08-01 00:13:15 +08:00 @hecz 同意你说的后半句,攻击语言的评论的确是不友好(除了对楼上那个老哥的攻击我不抱有任何抱歉以外),但是我不同意你说的前半句。 冗余就是不好的,简单比复杂好。2L 的吐槽来自生活,除了原生写 Java/还处在对内存失控恐惧中那些 Cpp 转 Java 的人,接手 Java 项目不被困扰的。退一万步说,可能 Lombok 是有传染的问题,但是这只是说明这个解决问题的方案不够好,不代表这个问题不存在。 另外我对团队要不要用 Lombok 的态度是中立的。因为这是仁者见仁的东西,嗓门大的规则定好了就定好了没啥好说的,我接手的项目就不让用,那就不用呗。 但是,要我定规则,那就是用 Lombok 或者上 Kotlin 。 |
![]() | 78 Reficul 2020-08-01 00:16:06 +08:00 fix typo: “接手 Java 项目不被困扰的” -> “接手 Java 项目(没有)不被困扰的” |
![]() | 79 zzl22100048 2020-08-01 01:38:59 +08:00 via iPhone lombok 用之前还是要有规范的,总会有人把这个依赖放 complie,用 provided 的话不会扩散 |
80 lightingtime 2020-08-01 01:47:20 +08:00 用的理由是方便开发,不用的理由是啥?想单独定制的就单独拿出来写就好了啊,类上写好注释还方便维护。 |
81 wiix 2020-08-01 01:49:52 +08:00 @lxk11153 org.apache.commons.lang3.builder.ToStringBuilder commons lang 里的一个工具。 |
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) 好了。 |
84 aguesuka 2020-08-01 09:07:47 +08:00 就我个人而言,如果是为了省几行代码,直接上 java14 或者 kotlin 更好 |
![]() | 85 blless 2020-08-01 09:35:47 +08:00 via Android 虽然我不是 java 仔,但是我似乎已经看见一条 java 的分裂路线了 |
![]() | 86 ganning 2020-08-01 10:25:39 +08:00 使用 lombok 也没有禁止生成 /使用 get/set 。。。。就看个人风格还是团队风格了。 |
![]() | 87 iweisi 2020-08-01 10:46:30 +08:00 ![]() 一个 et set 都吵,这么在乎细节,看来项目质量肯定很棒哦 |
![]() | 88 MakHoCheung 2020-08-01 12:20:38 +08:00 via iPhone ![]() 我是菜鸡,我用 public |
![]() | 89 cheng6563 2020-08-01 12:50:40 +08:00 via Android 其实挺方案这种直接改语法的插件的,但无奈 getter setter 太臭了 |
![]() | 90 iyangyuan 2020-08-01 17:18:02 +08:00 via iPhone 多一事不如少一事,不用不会出问题,用了可能会出问题 |
![]() | 91 andj4cn 2020-08-02 10:32:35 +08:00 |
92 hecz 2020-08-02 15:51:37 +08:00 @Reficul 你说的定规则的观点我同意,这种东西要么就全用,要么就全都不用,定完规则按照规则走就行。简单当然比复杂好,但是还是得看场景的,比如之前的 beanUtils 类,试用起来确实方便,但是也会新增一些性能问题 |
![]() | 93 yuekcc 2020-08-02 20:09:14 +08:00 曾经在一个项目上用过,代码确实整洁了。但是后面全部改回手写的 getter/setter 了,原因就是这东西不是所有人能接受。而且还得手工安装一个插件。团队小还好,最多就是多安排几次培训。这样想来成本也不低,如果人员流动大的话,就不是一两次培训能解决的了。而且 idea 这种 ide 按个快捷键就能生成 getter 、setter 了,可以解决不少的手写 getter 、setter 场景。 最好解决方案就是上 kotlin 。 |