iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >为什么放弃使用Lombok
  • 858
分享到

为什么放弃使用Lombok

2023-06-16 10:06:39 858人浏览 安东尼
摘要

这篇文章主要介绍“为什么放弃使用Lombok”,在日常操作中,相信很多人在为什么放弃使用Lombok问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么放弃使用Lombok”的疑惑有所帮助!接下来,请跟着小编

这篇文章主要介绍“为什么放弃使用Lombok”,在日常操作中,相信很多人在为什么放弃使用Lombok问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么放弃使用Lombok”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

面对 Lombok 提供的诸多“神走位”,你并不会介意在 IDE 上新增一个插件。对于 IntelliJ idea 玩家而言,只需搜索“Lombok  Plugin”便可找到这款神器并安装上它。爱上 Lombok 从安装 Lombok 插件开始,恨也从此萌芽。

没使用 Lombok 之前,我们的源代码看起来是这一的:

public class MyObject{     private Long id;     private String name;     private int age;     private int gender;      public Long getId(){         return id;     }     public void setId(Long id){         this.id = id;     }     public String getName(){         return name;     }     public void setName(String name){         this.name = name;     }     public int getAge(){         return age;     }     public void setAge(int age){         this.age = age;     }     public int getGender(){         return gender;     }     public void setGender(int gender){         this.gender = gender;     }      @Override     public boolean equals(Object o){         if(this == o){             return true;         }         if(o == null || getClass() != o.getClass()){             return false;         }         MyObject obj = (MyObject) o;         return age = obj.age &&             gender = obj.gender &&             Objects.equals(id,obj.id) &&             Objects.queals(name,obj.name);     }      @Override     public int hashCode(){         return Objects.hash(id,name,age,gender);     }      @Override     public String toString(){         return "MyObject{"+             "id="+id+             "name="+name+             "age="+age+             "gender="+gander+             "}";     } }

每个 JavaBean 都会充斥着如上述 getter,setter,equals,hashCode 和 toString  的模板代码,这看起来像一个偏胖的人(不得不承认 Java 是一个有缺陷的编程语言)。

当我们安装好 Lombok 插件后,IDE 便可以识别其酷炫的注解,使用 Lombok 的 @Getter 和 @Setter  注解后,代码会像下面这样看起来很苗条:

@Getter @Setter public class MyObject{     private Long id;     private String name;     private int age;     private int gender;      @Override     public boolean equals(Object o){         if(this == o){             return true;         }         if(o == null || getClass() != o.getClass()){             return false;         }         MyObject obj = (MyObject) o;         return age = obj.age &&             gender = obj.gender &&             Objects.equals(id,obj.id) &&             Objects.queals(name,obj.name);     }      @Override     public int hashCode(){         return Objects.hash(id,name,age,gender);     }      @Override     public String toString(){         return "MyObject{"+             "id="+id+             "name="+name+             "age="+age+             "gender="+gander+             "}";     } }

现在的代码是否看起来爽多了?但这还不是最爽的时候。既然其他方法都替换掉了,那把 toString 方法也一起拿掉吧.如你所愿,可以使用 @ToString  注解去掉对于的方法:

@Getter @Setter @EqualsAndHashCode public class MyObject{     private Long id;     private String name;     private int age;     private int gender;      @Override     public String toString(){         return "MyObject{"+             "id="+id+             "name="+name+             "age="+age+             "gender="+gander+             "}";     } }

经过 Lombok 的戏法之后,相比一开始的代码,看起来是不是很酷炫,很苗条,很性感?你以为到此为止了?

远不止于此,你会发现类名上一大坨注解看起来好别扭,Lombok 提供了一个组合注解 @Data,可以替换掉类名头上那坨像翔一样的东西:

@Data public class MyObject{     private Long id;     private String name;     private int age;     private int gender; }

现在,Lombok 是否让你的对象成为了你心目中完美的样子?魔鬼的“身材”,酷炫精炼。

Lombok 还有其他一些注解,如 @Slf4j,@NoArgsConstructor,@AllArgsConstructor 等等,介绍 Lombok  用法不是本文重点。

以上代码行数的变化过程,也许是无数程序员爱上 Lombok 的主要原因吧,这就像一个肥胖的人逐渐变成一个身材苗条的人。

同时也让你看到了一个现象:你以为程序员很懒吗?其他有些时候他们比你想象中的还要懒。在爽的同时,也为代码种下了祸根。

扭曲的审美,爱的隐患

扭曲的审美,导致了被审视的对象处于亚健康状态。使用 Lombok 插件之后,我们的代码也处于“亚健康”状态。

还是回归一开始的那句话:所有的源代码很多时候是用来阅读的,只有很少的时间是用来执行的。

本质上讲,我们都追求减少程序中的样板代码以使其代码更精炼简洁,从而提高代码的可读性和可维护性。

但 Lombok 并没有达到我们所追求的这一愿景,它仅仅是利用 Java  语言在编译时的空档期,使用一种很取巧的方式,将我们所需要的方法注入(写入)到当前的类中,这种过程很像在 hack 我们的代码,只是一种看起来酷炫的把戏。

这种把戏并不智能和安全,反而会破坏 Java 代码现有的特性以及代码的可读性。

下面,结合我自己使用 Lombok 之后的感受,谈谈 Lombok 带来的几大痛点。

JDK 版本问题

当我想要将现有项目jdk 从 Java 8 升级到 Java 11 时,我发现 Lombok 不能正常工作了。

于是我不得不将所有的 Lombok 注解从项目源代码中清除,并使用 IDE 自带的功能生成  getter/setter,equals,hashCode,toString 以及构造器等方法。

你也可以使用 Delombok 工具完成这一过程,但这终究会消耗你很多的时间。

胁迫使用

当你的源代码中使用了 Lombok,恰好你的代码又被其他的人所使用,那么依赖你代码的人,也必须安装 Lombok  插件(不管他们喜不喜欢),同时还要花费时间去了解 Lombok 注解的使用情况,如果不那么做,代码将无法正常运行。使用过 Lombok  之后,我发现这是一种很流氓的行为。

可读性差

Lombok 隐藏了 JavaBean 封装的细节,如果你使用 @AllArgsConstructor  注解,它将提供一个巨型构造器,让外界有机会在初始化对象时修改类中所有的属性。

首先,这是极其不安全的,因为类中某系属性我们是不希望被修改的;另外,如果某个类中有几十个属性存在,就会有一个包含几十个参数的构造器被 Lombo  k注入到类中,这是不理智的行为。

其次,构造器参数的顺序完全由 Lombok 所控制,我们并不能操控,只有当你需要调试时才发现有一个奇怪的“小强”在等着你。

最后,在运行代码之前,所有 JavaBean 中的方法你只能想象他们长什么样子,你并不能看见。

代码耦合度增加

当你使用 Lombok 来编写某一个模块的代码后,其余依赖此模块的其他代码都需要引入 Lombok 依赖,同时还需要在 IDE 中安装 Lombok  的插件。

虽然 Lombok 的依赖包并不大,但就因为其中一个地方使用了 Lombok,其余所有的依赖方都要强制加入 Lombok 的 jar  包,这是一种入侵式的耦合,如果再遇上 JDK 版本问题,这将是一场灾难。

得不偿失

使用 Lombok,一时觉得很爽,但它却污染了你的代码,破坏了 Java  代码的完整性,可读性和安全性,同时还增加的团队的技术债务,这是一种弊大于利,得不偿失的操作。

为什么放弃使用Lombok

如果你确实想让自己的代码更加精炼,同时又兼顾可读性和编码效率,不妨使用主流的 ScalaKotlin 这一基于 JVM 的语言。

到此,关于“为什么放弃使用Lombok”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 为什么放弃使用Lombok

本文链接: https://www.lsjlt.com/news/283142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么放弃使用Lombok
    这篇文章主要介绍“为什么放弃使用Lombok”,在日常操作中,相信很多人在为什么放弃使用Lombok问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么放弃使用Lombok”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-16
  • 为什么有人选择放弃使用Golang?
    为什么有人选择放弃使用Golang? 近年来,随着计算机科学领域的不断发展,越来越多的编程语言被开发出来,其中Golang作为一门具有高效性能和并发特性的编程语言,在一定范围内受到了广...
    99+
    2024-03-01
    生态系统 性能问题 学习曲线
  • 为什么放弃使用Kotlin中的协程
    这篇文章主要讲解了“为什么放弃使用Kotlin中的协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么放弃使用Kotlin中的协程”吧!调试请看下面一段...
    99+
    2024-04-02
  • 为什么放弃用Spring Boot中的RestTemplate
    这篇文章主要讲解了“为什么放弃用Spring Boot中的RestTemplate”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么放弃用Spring Boot中的RestTemplate...
    99+
    2023-06-16
  • 如何使用Git放弃修改
    Git是一个分布式版本控制系统,它能够帮助我们管理代码、团队协作、版本控制等工作。在使用Git进行开发过程中,经常会遇到需要放弃修改的文件或者文件夹等情况。这时候就需要学会如何使用Git放弃修改。一、git checkout首先介绍的是gi...
    99+
    2023-10-22
  • 分析为什么会弃用jQuery
    这篇文章主要介绍“分析为什么会弃用jQuery”,在日常操作中,相信很多人在分析为什么会弃用jQuery问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析为什么会弃用jQue...
    99+
    2024-04-02
  • 为什么某些HTML元素被弃用
    这期内容当中小编将会给大家带来有关为什么某些HTML元素被弃用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。互联网已经存在了很长时间,并且随着时间的流逝,我们已经改变了对...
    99+
    2024-04-02
  • 为什么弃用GNOME 3 Linus Torvalds改用Xfce
    为什么弃用GNOME 3 Linus Torvalds改用Xfce,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。许多人都不喜欢变化太大的GNOME 3桌面,现在...
    99+
    2023-06-16
  • Lombok中@Data的使用方法是什么
    本篇内容主要讲解“Lombok中@Data的使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Lombok中@Data的使用方法是什么”吧!Lombok先来简单介绍一下 Lombok ...
    99+
    2023-06-21
  • 为什么宁可用Lombok也不把成员设置为public
    这篇“为什么宁可用Lombok也不把成员设置为public”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“为什么宁可用Lomb...
    99+
    2023-07-05
  • 为什么红帽为了CentOS Stream 而抛弃 CentOS
    本篇文章为大家展示了为什么红帽为了CentOS Stream 而抛弃 CentOS,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。不,这不是 IBM 在发号施令。这个决定是红帽内部出于商业上的原因做出...
    99+
    2023-06-15
  • java Lombok之@Accessors怎么使用
    这篇文章主要介绍“java Lombok之@Accessors怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java Lombok之@Accessors怎么使用”文章能帮...
    99+
    2023-07-05
  • java中Lombok的作用是什么
    java中Lombok的作用是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。...
    99+
    2023-06-14
  • 为什么wait和notify必须放在synchronized中使用
    目录wait/notify基础使用wait/notify和synchronized一起用?原因分析wait和notify问题复现总结前言: 在多线程编程中,wait 方法是让当前线程...
    99+
    2024-04-02
  • 放弃Golang编程语言的背后真正原因是什么?
    放弃Golang编程语言的背后真正原因是什么? 作为一种高效、静态类型的编程语言,Golang(又称Go)自诞生以来备受程序员的青睐。然而,随着时间的推移,一些开发者开始放弃Golan...
    99+
    2024-03-01
    性能 兼容性 失望 标准库
  • 为什么go和rust语言都舍弃了继承
    一、继承 1、什么是继承 继承是一种面向对象编程的重要特性,它可以让子类继承父类的属性和方法,并在此基础上进行扩展。 2、继承的问题 继承层次复杂:当类之间存在多层继承关系时,会形成复杂的继承层次,难以维护和理解。 ...
    99+
    2023-10-29
    语言 rust
  • springboot的Lombok、devtools、Spring Initailizr怎么使用
    今天小编给大家分享一下springboot的Lombok、devtools、Spring Initailizr怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅...
    99+
    2023-07-04
  • idea在springboot中怎么使用lombok插件
    这篇文章主要讲解了“idea在springboot中怎么使用lombok插件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“idea在springboot中怎么使用lombok插件”吧!在id...
    99+
    2023-06-20
  • 想要使用 ASP 重定向接口,又不想放弃 Laravel?看这里!
    如果你使用 Laravel 框架开发 Web 应用程序,但是需要使用 ASP 重定向接口,那么你可能会感到有些困惑。毕竟,Laravel 是一个基于 PHP 的框架,而 ASP 是一个基于 Microsoft .NET 平台的框架。不过,别...
    99+
    2023-06-23
    重定向 接口 laravel
  • 为什么使用API
    本篇内容介绍了“为什么使用API”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是APIAPI(Appl...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作