|
|
51CTO旗下网站
|
|
移步端
  • 新来个艺术总监,取缔我们采用Lombok!

    Lombok 是一款非常实用 Java 工具,租用来赞助开发人员消除 Java 的长代码,尤其是对于简单的 Java 目标(POJO)

    笔者:Hollis 来源:Java的道| 2020-02-13 08:08

    “我有个学弟,在一家小型互联网公司做 Java 此后端开发,近些年他们公司新来了一番艺术总监。

    图表来自 Pexels

    这位技术总监对艺术细节很重视,一来公司今后就生产了很多"政策",比如定义了众多开发规范、日志规范、甚至是要求大家统一使用某一款 IDE。

    但是这些都不是我这个学弟和我吐槽的线,她实事求是和我吐槽的是,她很不能了解,这位新来之技艺总监竟然禁止公司内部所有开发利用 Lombok。但是又没给出十分引人注目的,可以让人信服的理由。

    于是乎他来找我聊天,问我这个要求到底是否合理。关于这个工作,我以为这位技术总监的着眼点是好的,但是做法未免有些极端。

    从而说出发点是好的,鉴于使用 Lombok 活生生会带来许多问题,而且我个人在办事中也基本不积极采取。

    从而说不积极采取,那是因为有些同事的编码还是使用了之,故此我也被迫的要点安装 Lombok 的软件。

    既然聊到这个话题,就简单说说我之组成部分看法。

    Lombok 有什么好处?

    Lombok 是一款非常实用 Java 工具,租用来赞助开发人员消除 Java 的长代码,尤其是对于简单的 Java 目标(POJO)。他通过注释实现这一目的。

    如果大家对于 Lombok 比起了解的话,可以先跳过这一段,直接往后看,如果不是很熟悉的话,可以概括了解一下。

    想在档次中采用 Lombok,要求三个步骤:

    ①IDE 官方安装 Lombok 硬件

    脚下 Lombok 支持多种 IDE,其中包括主流的 Eclipse、Intellij IDEA、Myeclipse 等都是帮腔的。

    在 IDEA 官方安装方式如下:

    ②导入相关依赖

    Lombok 支持使用多重构建工具进行导入依赖,脚下第一支持 maven、gardle、ant 等。

    如使用 maven 导入方式如下:

          
    1. <dependency> 
    2.     <groupId>org.projectlombok</groupId> 
    3.     <artifactId>lombok</artifactId> 
    4.     <version>1.18.12</version> 
    5.     <scope>provided</scope> 
    6. </dependency> 

    ③代码中采用注解

    Lombok 言简意赅代码的措施根本是通过注解来促成,其中常用的有 @Data、@Getter/@Setter、@Builder、@NonNull 等。

    如使用 @Data 诠释,即可简单的概念一个 Java Bean:

          
    1. import lombok.Data; 
    2. @Data 
    3. public class Menu { 
    4.     private String shopId; 
    5.     private String skuMenuId; 
    6.     private String skuName; 

    采用 @Data 诠释在类上,相当于同时采取了 @ToString、@EqualsAndHashCode、@Getter、@Setter 和 @RequiredArgsConstrutor 该署注解,对于 POJO 类十分有用。

    即自动帮忙给例子中的 Menu 类中定义了 toString、Getter、Setter 等方式。

    穿过上面的例证,大家可以发现,咱们采用 @Data 诠释大大削减了代码量,使代码非常简洁。这也是许多开发者热衷于使用 Lombok 的首要原因。

    此外,关于 Lombok 的采取,不同人有不同之意见,因为许多人口都使用过 Lombok,对于他的长处都比较了解,故此接下来我们着重说一下 Lombok 的采取会带来哪些问题。

    Lombok 有什么坏处?

    强 X 党员

    因为 Lombok 的采取要求开发者一定要在 IDE 官方安装对应的软件。

    如果未安装插件的话,采用 IDE 开拓一个基于 Lombok 的品种的话会唤起找不到艺术等错误。导致项目编译失败。

    具体地说,如果项目组中有一度人口采取了 Lombok,这就是说其他人就不能不也要安装 IDE 硬件。否则就没办法协同开发。

    更主要的是,如果我们定义之一个 jar 包中采用了 Lombok,这就是说就要求所有依赖这个 jar 包的一切应用都不能不安装插件,这种侵入性是很高的。

    代码可读性,可调试性低

    在代码中采用了 Lombok,活生生可以帮助减少很多代码,因为 Lombok 会帮助自动生成很多代码。

    但是这些代码是中心在编译阶段才会生成绩的,故此在开发的经过中,其实很多代码是缺少的。

    在代码中大量用到 Lombok,就导致代码的读报会低很多,而且也会给代码调试带来一定的题材。

    比如,咱们想要掌握某个类中的某个属性的 getter 办法都把哪些类引用的话,就没那么简单了。

    有坑

    因为 Lombok 使代码开发非常方便,这就使得部分开发者对他产生过度依赖。

    在采取 Lombok 经过中,如果对于各种注解的底色原理不明白的话,很容易产生意想不到的结果。

    举一个简单的例证,咱们掌握,顶我们采用 @Data 定义一个类的时节,会自动帮咱生成 equals() 办法 。

    但是如果只利用了 @Data,而不采取 @EqualsAndHashCode(callSuper=true) 的话,会默认是 @EqualsAndHashCode(callSuper=false)。

    此刻生成的 equals() 办法只会比较子类的习性,不会考虑从父类继承的习性,不论是父类特性访问权限是否开放。这就可能得到意想不到的结果。

    影响升级

    因为 Lombok 对于代码有很强的侵入性,就可能带来一个比较大的题材,那就是会影响我们对 JDK 的升级换代。

    按照现行 JDK 的升级换代频率,每半年都会生产一个新的版本,但是 Lombok 表现一个次三方工具,并且是由开源团队维护的,这就是说他的迭代速度是心有余而力不足保证的。

    故此,如果我们需要升级到某个新版本的 JDK 的时节,若其中的性状在 Lombok 官方不支持的话就会受到影响。

    还有一个可能带来的题材,就是 Lombok 自己的升级换代也会受到限制。

    因为一个用到可能依赖了多个 jar 包,而每个 jar 包可能又要依赖不同版本的 Lombok。

    这就导致在利用中要求做版本仲裁,而我辈掌握,jar 包版本仲裁是没那么容易的,而且发生问题的概率也很高。

    破坏封装性

    上述几个问题,我以为都是有艺术可以避免的。但是有些人排斥使用 Lombok 还有一个重要的由来,那就是它会破坏封装性。

    强烈,Java 的三大特性包括封装性、继承性和多态性。

    如果我们在代码中直接行使 Lombok,这就是说他会自动帮咱生成 getter、setter 等方式,这就意味着,一度类中的所有参数都自动提供了设置和读取方法。

    举个简单的例证,咱们定义一个购物车类:

          
    1. @Data 
    2. public class ShoppingCart {  
    3.     //商品数目 
    4.     private int itemsCount;  
    5.     //总标价 
    6.     private double totalPrice;  
    7.     //商品明细 
    8.     private List items = new ArrayList<>(); 

    咱们掌握,购物车中商品数目、商品明细以及总标价三者之前其实是有关联关系的,如果需要修改的话是中心一起修改的。

    但是,咱们采用了 Lombok 的 @Data 诠释,对于 itemsCount 和 totalPrice 这两个属性,虽然我们将它们定义成 private 品种,但是提供了 public 的 getter、setter 办法。

    表面可以通过 setter 办法随意地修改这两个属性的值。咱们可以随意调用 setter 办法,来重新安装 itemsCount、totalPrice 属性的值,这也会导致其跟 items 属性的值不一致。

    而面向对象封装的概念是:穿过访问权限控制,隐身内部数据,表面仅能通过类提供的简单的接口访问、修改内部数据。故此,暴露不应当暴露的 setter 办法,明确违反了面向对象的包装特性。

    好的作法应该是不提供 getter/setter,而是只提供一个 public 的 addItem 办法,同时去修改 itemsCount、totalPrice 以及 items 三个属性。

    总结

    本文总结了常用的 Java 付出工具 Lombok 的得失。

    优点是采取注解即可帮忙自动生成代码,大妈削减了代码量,使代码非常简洁。

    但是并不意味着 Lombok 的采取没有其他问题,在采取 Lombok 的经过中,还可能生存对队员不谐和、对代码不谐和、对调整不谐和、对升级不谐和等问题。

    最重要的是,采用 Lombok 还会导致破坏封装性的题材。虽然使用 Lombok 生活着众多方便,但是也带来了部分问题。

    但是到底建不建议在一般开支中采用,我其实保持一个中立的态势,不建议大家过度依赖,也不要求大家一定要彻底不用。

    只要大家在采取的经过中,或者评估要不要在代码中引入 Lombok 先前,在想到她的长处的同时,能够考虑到他送代码带来的题材的,这就是说本文的目的也就赶到了!

    【编纂推荐】

    1. 2019 年 Serverless 采用调查
    2. 如何使用Ansible布局容器?
    3. Linus Torvalds 不建议使用 ZFS On Linux
    4. 快来看望,你正在采取的编程语言流行排行榜!别把时代淘汰了_IT艺术周刊第610为期
    5. 为什么你的批发版仍然在采取“过时的”Linux 基础?
    【义务编辑: 武晓燕 TEL:(010)68476606】

    点赞 0
  • 取缔  采用  Lombok
  • 分享:
    大家都在看
    猜你喜欢
  • 24H热文
    一周话题
    每月获赞
  • 删库跑路”这件事情真的发生了 ,还是艺术总监干的!致Linux运维:顶你的蒸发器被黑了,永恒要看是不是犯了这5点错误程序员必备学习编程软件,观看看你用过几个?2020年了,深度学习接下来到底该怎么走?感受未来操作系统:迪斯尼7年磨一剑的Windows 10X高考2020年2月编程语言排行榜新来个艺术总监,取缔我们采用Lombok!开发者撰文:.NET 副昨天辉煌到今天逐渐没落
  • 共渡疫情,51CTO免费开放价值1000万精品在线课程!为什么阿里P8、P9艺术大牛反复强调“布局化思维”?菜鸟码农成神之路:必发娱乐手机版精选好文,都在此间了国难当前,还敢骗捐款?我花了40个小时揪出这个畜生“跳槽”还是“卧槽”,你想好了吗?葡萄牙政府将用基于 Linux 的开放操作系统取代 Windows 7致Linux运维:顶你的蒸发器被黑了,永恒要看是不是犯了这5点错误一觉睡醒公司关门了!情绪奔溃
  • 菜鸟码农成神之路:必发娱乐手机版精选好文,都在此间了共渡疫情,51CTO免费开放价值1000万精品在线课程!为什么阿里P8、P9艺术大牛反复强调“布局化思维”?Mozilla 通告 MDN Web 付出人员要求评估报告阿里资深Leader:组建技术团队的组成部分思考35岁的你为何会“慌得一股”?“跳槽”还是“卧槽”,你想好了吗?火神山医院正式交付!三角开5G,太空建好信息系统,IT集团做了什么?
  • 订阅专栏+更多

    Kubernetes:21远处完美通关

    Kubernetes:21远处完美通关

    从小白到修神
    共29章 | king584911644

    153人口订阅学习

    Python使用场景实战手册

    Python使用场景实战手册

    Python使用场景实战手册
    共3章 | KaliArch

    122人口订阅学习

    一步到位玩儿透Ansible

    一步到位玩儿透Ansible

    Ansible
    共17章 | 骏马金龙1

    209人口订阅学习

    视频课程+更多

    强哥带你读书docker

    强哥带你读书docker

    教授:周玉强10002人口学习过

    网络工程师0基础入门指南视频课程

    网络工程师0基础入门指南视频课程

    教授:庚振源54169人口学习过

    阿里云ACP认证通关攻略视频培训

    阿里云ACP认证通关攻略视频培训

    教授:杰森洋93698人口学习过

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微

      
         
         
         
         
         
          
         
         
         
            &lt;strike id="0dbecfd1"&gt;&lt;/strike&gt;