我们先来看一下Lombok是何物?
Lombok,本身是一个Java库,它会自动插入编辑器和构建工具中,从而使Java更加生动有趣。通俗一些讲,就是原来需要写的许多的getter、setter、equals、构造方法等,不需要再写了。
正是这些懒到极致的特性,导致大批的Java开发工程师使用该库,并奉若神明,毕竟可以少写代码,早点下班,简直不要太方便。
但是,很不幸的是,我的团队被禁止了,还是我亲自禁止的。
这是为什么呢?
其实,大多数人只看到了其方便之处,而没有看到有多大的危害,而有些还是对开发者本身的损害。
一人Lombok,人人Lombok
Lombok不单是一个Java库,而且还需要插件支持,如果没有,就会报错。
所以,只要团队里的一个人在任一项目中使用了Lombok,那么团队的所有人全部要跟着安装Lombok插件,也跟着使用Lombok,因为不这样做会报错,且严重影响阅读。
这是非常令人恼怒的,你强加给队友一些本来他们不想用的东西,非常影响他人心情,以及团队和谐稳定。
比如 @Data 注解,你必须完全了解其含义,到底会生成哪些方法,怎么生成的,效果怎样等等。如果不完全了解,就有可能会造成意想不到的bug,甚至花费巨大精力去排查。
比如这个例子,原本只有15行代码,加了 @Data 注解之后,编译生成了109行代码,多了许多方法。
源码:
编译后:
这种情况是非常致命的,就好比你不知道这种药吃下去会如何,到底能不能治病,有没有什么副作用等等。
编译报错,无处下手
使用Lombok之后,一旦这些地方发生编译错误,在控制台看不到任何准确的错误信息,永远都只是compile failed。这无疑给排查错误带来了不必要的负担,且无解。必须通过肉眼查看源码,凭借丰富的经验来排查问题,试问,排查了许久解决不了,换你你怎么解决?
看似代码简洁,实则严重影响代码质量及阅读体验
同样是上面的例子,只有15行源码,加了 @Data 注解。
开发者通过源码根本看不出来是何意图,且编译后会有什么样的效果,会添加哪些方法,逻辑是怎么样的,我能不能放心的调用。等等等等,这所有的一切,都是一个未知数。看似代码非常简洁,实则存在非常大的隐患。不止是影响阅读体验,而更严重的,则是代码质量问题。
大家都明白,代码不止是写出来那么简单,还要给别人看,别人还要维护,还要排除问题。所谓三分开发,七分维护,正是如此。而如此做,无疑给维护、后续开发者带来不小的学习成本,提升了解决问题的难度,增加了解决问题所花费的时间。在时间就是生命的今天,怎么能够允许!!!
会产生你意想不到的编译效果
我们针对上述代码,再添加一个 @Getter 注解,且 lazy 属性为 true。本意为生成get方法,且懒加载。
那么我们看一下编译后的代码:
这对开发者来说,其实已经完全偏离了本意,同时,也是最致命的,因为开发者完全不知道将来会发生什么,也无法预测后果。
还有其它可能没有提到的原因,但是无论是什么原因,该类库都不适合用于生产环境,如果只是单纯的学习研究,那么无可厚非。但是,如果要用于生产环境,还是算了。