开发者

宁可用Lombok也不把成员设置为public原理解析

目录
  • 思考一个问题,为何属性是private,然后用get/set方法?
  • 下面系统的分析一下,why?
  • Lombok应运而生
  • 不和谐的声音,禁止使用Lombok?
    • 1、jdk版本问题
    • 2、开始营业
    • 3、可读性差
    • 4、使用Lombok,写代码的时候很爽,但它
  • 总结

    思考一个问题,为何属性是private,然后用get/set方法?

    普遍想法

    • 大家都这么写,我也这么写;
    • 这是Java的封装特性,你不知道?
    • 隐藏属性,不暴露过多细节,更安全;

    下面系统的分析一下,why?

    1、采用get/set方法其实是Java的一个协议,在1996年12月提出的java bean1.00-A,通过统一的规范可以设置对象的值(比如getrUNaEi、set方法)。很多框架也是在此基础上开发的,底层源码也都是通过get/set访问属性的。

    2、很多时候,可以通过get/set方法,① 增加一些功能;② 增加一些特定的修改,比如打折;③ 增加一些访问逻辑;④ 还可以通过set方法触发一些编程事件。

    3、如果你将一个属性定义为public了,而且在50处调用了,此时,产品经理来了一个需求,将此次的促销商品打五折;难道你要去修改这50处的代码吗?如果你用get/set封装了,修改对应属性的set方法即可,so easy~!

    4、就像上面所说,大家都这么写,我也这么写,但是,对于大多数企业应用来说,直接将属性写成public,也是没毛病。

    5、也可以理解为,“风格统一的代码更好维护”。

    6、假如我新接手一个项目,要用到某个bean,我也不知道都有什么属性,一般的做法都是先new一个,然后通过小数点联想出来,如果没有get/set,那真的很烦躁。

    7、现在都是面向接口编程,而Java接口中是不能定义普通的属性的,但可以定义get/set方法。

    宁可用Lombok也不把成员设置为public原理解析

    www.devze.com

    宁可用Lombok也不把成员设置为public原理解析

    来,一起回味一下封装的概念。

    封装是指一个对象对其他对象隐藏其部分状态和行为,而仅向程序其他部分暴露有限的接口的能力。封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。对于封装这个特性,我们需要编程语言本身提供一定的语法机制来支持。这个语法机制就是访问权限控制。

    Lombok应运而生

    为了解决get/set的代码臃肿问题,Lombok应运而生。简单无脑,解决一切烦恼。

    使用 Lombok 可以让代码更加简洁,减少冗余的代码量。使用 Lombok 时,可以使用注解来生成常用的代码,如 getter、setter、equals、hashCode 和 toString 方法,这些方法通常都是在 Java 类中需要手动编写的。 使用 Lombok 可以省去这些手动编写的步骤,使代码更加简洁。此外,使用 Lombok 还有一个好处是可以使用注解来生成构造函数和静态构造函数,这些构造函数可以接受所有属性作为参数。这样就可以避免手动编写很多构造函数的情况。因此,使用 Lombok 可以让代码更加简洁,减少冗余的代码量,提高代码的可读性和可维护性。

    Lombok代替public,因为public成员的可见性太大。将成员定义为public意味着任何地方都可以访问这个成员,这可能会导致成员被意外地修改,从而影响类的稳定性和正确性。而使用Lombok可以通过自动生成getter和setter方法来保护成员的可见性,从而提高类的封装性和可维护性。此python外,使用Lombok还可以帮助开发人员减少编写重复的代码,提升工作效率。

    因此,为了保护成员的可见性并提升代码的可维护性,许多人宁可使用Lombok,也不愿意将类的成员设为public。

    不和谐的声音,禁止使用Lombok?

    1、jdk版本问题

    目前国内大多数Java项目,采用的都是JDK1.8,因为它开发者_Go教程够稳定,功能也完全够用,但是,如果哪一天,你的客户心血来潮,就是想用JDK11,甚至JDK17,此时,你会发现Lombok不好用了,于是,不得不将好几百个实体类,通过idea生成get/set、equals、toString等方法,很烦躁。

    2、开始营业

    当你的客户获取到你的源代码之后,他也想看看,运行一下,此时发现没安装Lombok,报错了,安装Lombok,不了解这是什么,还要去百度学习一下,被 迫营业,很烦躁。

    3、可读性差

    • Lombok隐藏了Jwww.devze.comavaBean的封装细节;
    • toString()不知道会打印什么;
    • @AllArgsConstructor提供一个全量构造器, 让外界在初始化时,可以随意修改其属性,极其不安全。如果属性过多,这个全量构造器,看起来,很鸡肋;
    • 参数的顺序我们也无法控制,都是按照Lombok的心情来的;

    4、使用Lombok,写代码的时候很爽,但它

    • 污染了你的代码;
    • 玷污了Java语言的纯粹;
    • 破坏了Java代码的完整性、可读性、安全性;
    • 增加了代码的耦合度;
    • 增加了代码的调试难度;

    这是一种弊大于利、得不偿失的操作。

    总结

    综上所述,将成员变量定义为public是不可取的,使用Lombok也不是一个明智的选择,还是老老实实的通过IDE生成get/set方法吧。

    以上就是宁可用Lombok也不把成员设置为public原理解析的详细内容,更多关于Lombok public 成员设置的资料请关注我们其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜