lombok如何给属性设置_你不得不会的Lombok全面详细讲解,全网最详细的教程
读者范围:
- 如果你使用过Lombok你可能只使用了部分功能,那么这里列举了所有功能,你继续阅读能完善这方面的知识;
- 如果你还没用用过,甚至不知道这是什么,那么对不起,你已经被技术淘汰了,这里有一份详尽的教程让你一次性恶补过来;
简介
Lombok是一个可以通过注解来帮助我们简化消除一些必须有但显得很臃肿的Java代码的一种工具,通过使用对应的注解,可以在编译源码的时候动态添加源码。
例如在实体中经常见到一堆Getter和Setter方法,这些方法是必要的不可缺少的,但是这些代码感觉却像是“垃圾”,看起来重复而臃肿,看起来也不美观,也不简洁清爽,可以使用lombok,在类上直接使用@Getter @Setter 这两个注解,那么代码在编译的时候会自动帮你生成这个类下的所有字段对应的Getter和Setter方法,实体中只有一些属性,看起来实体类变得简洁很多,虽然IDE可以很快的生成出来,但是生成之后的实体还是那么的臃肿,而且如果修改了字段的名称或者字段的类型还要重新生成,比较麻烦,使用Lombok就是消除一些含金量不高却必须要有的代码,使程序员看起来代码更加简洁、清爽。
Automatic Resource Management, automatic generation of getters, setters, equals, hashCode and toString, and more!
- lombok的官方地址:https://projectlombok.org/
- lombok的Github地址:https://github.com/rzwitserloot/lombok
Lombok plugin 插件
Intellij idea 使用Lombok需要安装插件:Lombok plugin: Preferences —> Plugins —> 搜索 Lombok plugin — > Install
同时设置 Preferences -> Compiler -> Annotation Processors -> Enable annotation processing勾选。
使用示例
首先引入lombok依赖
1. @Getter/@Setter
为字段生成Getter和Setter方法,可以注解到字段或者类上(注解在类上会为类中的所有字段生成Getter和Setter方法),默认是public类型的,如果需要的话可以修改方法的访问级别。
结果解释:
id字段生成了Getter&Setter,访问修饰符是public
phone只生成了Getter方法,因为只使用了@Getter而没有使用@Setter, 并且访问修饰符是protected
password 上并没有注解,所以什么都不生成
注意:Lombok中的注解一般都会包含一个无参构造函数注解@NoArgsConstructor(用于生成无参构造函数的) ,所以还会额外生成一个无参构造函数
@Getter @Setter 注解在类上,表示为类中的所有字段生成Getter&Setter方法。
2. @NonNull
为字段赋值时(即调用字段的setter方法时),如果传的参数为null,则会抛出空异常NullPointerException,生成setter方法时会对参数是否为空检查
3. @NoArgsConstructor
生成一个无参构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null, 这样编译器就不会报错。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。
4. @RequiredArgsConstructor
生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段。
@RequiredArgsConstructor(staticName = “of”)会生成一个of()的静态方法,并把构造方法设置为私有的
必要的构造函数只会生成final修饰的未经初始化的字段或者是以@NonNull注解的未经初始化的字段, 所以生成了public User(@NonNull String phone, Integer age)构造函数
5. @AllArgsConstructor
生成一个全参数的构造方法
6. @ToString
生成toString()方法,默认情况下它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段,可以指定一个也可以指定多个@ToString(exclude = “id”) / @ToString(exclude = {“id”,“name”})
如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)
7. @EqualsAndHashCode
生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在of参数中命名它们来准确指定希望使用哪些字段。
// exclude 排除字段
@EqualsAndHashCode(exclude = {“password”, “salt”})
// of 指定要包含的字段
@EqualsAndHashCode(of = {“id”, “phone”, “password”})
8. @Data
@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能
9. @Value
@Value 将字段都变成不可变类型:使用final修饰, 同时还包含@ToString、@EqualsAndHashCode、@AllArgsConstructor 、@Getter(注意只有Getter没有Setter)
10. @Log
生成log对象,用于记录日志,可以通过topic属性来设置getLogger(String name)方法的参数 例如 @Log4j(topic = “com.xxx.entity.User”),默认是类的全限定名,即 类名.class,log支持以下几种:
@Log java.util.logging.Logger
@Log4j org.apache.log4j.Logger
@Log4j2 org.apache.logging.log4j.Logger
@Slf4j org.slf4j.Logger
@XSlf4j org.slf4j.ext.XLogger
@CommonsLog org.apache.commons.logging.Log
@JBossLog org.jboss.logging.Logger
11. @SneakyThrows
12. @Synchronized
给方法加上同步锁
13. @Cleanup
主要用来修饰 IO 流相关类, 会在 finally 代码块中对该资源进行 close();
14. @Getter(lazy = true)
@Getter(lazy = true)
标注字段为懒加载字段,懒加载字段在创建对象时不会进行初始化,而是在第一次访问的时候才会初始化,后面再次访问也不会重复初始化
15. @Wither
提供了给final字段赋值的一种方法
16. @Builder
@Builder注释为你的类生成复杂的构建器API。
17. @Delegate
为List类型的字段生成一大堆常用的方法,其实这些方法都是List中的方法
注意:一个类中只能使用一个@Delegate注解,因为使用多个会生成多个size()方法,从而会编译报错。
lombok.config
lombok.config配置文件是通过一些设置来控制代码生成的规则或者称之为习惯,配置文件的位置应放在src/mian/java,不要放置在src/main/resources。
注意配置文件和要使用注解的类要在同一套代码中,要么同时在src/main/java 要么同时在 src/test/java中
lombok.config
- 如果认为写的还可以请点个赞,我将继续努力
- 如果您没有时间看可先收藏或者转发
lombok如何给属性设置_你不得不会的Lombok全面详细讲解,全网最详细的教程相关推荐
- lombok如何给属性设置_【扮家家云渲染】3Dmax干货|模型如何打光及其属性的设置技巧...
3dmax如何对模型打灯光及其属性的设置,能让模型的阴影更细致,表现物体的真实: ①在3dmax中如果没有任何光源,场景将是漆黑一片 ②为了在没有添加灯光的情况下也可以看到场景3dmax提供了一种默认 ...
- Java基类共同属性设置_多选择基类的访问属性-Java初学笔记
多选择基类的访问属性 你现在知道在定义类的访间属性时可用的选择项,你希望使用这些类定义子类.你知道在类继承上这些属性所具有的效果,但是你如何决定到底应该使用哪一个呢? 这里没有死板和现成的规则,你选择 ...
- mfc combobox dropdown中编辑框不可输入的属性设置_实践 | 一文知晓MES系统中的批次管控功能...
MES系统中的生产批次管理,在制造企业特别是流程制造行业,存在一些需要按批号管理的原材料.半成品和成品统一称它们为料号,这些料号在库房和加工现场都有明确的批次标识并隔离存放,在企业生产加工的各个环节, ...
- linq的字段自增长属性设置_云途晨报9月9日前,这5类ebay物品属性必须完成更新;Wish体积重计算方式即将更新...
8月6日,星期四 本期要闻 √9月9日前,这5类eBay物品属性必须完成更新 √亚马逊新公告:卖家自配送订单新增小部件 √Wish:体积重计算方式即将更新 √全球速卖通成为东北欧最大网购平台 √意大利 ...
- chartcontrol饼状图属性设置_温故而知新,ggplot2 饼图的几点笔记
其实 ggplot2 并没有类似于 geom_pie() 这样的函数实现饼图的绘制,它是由 geom_bar() 柱状图经过 coord_polar() 极坐标弯曲从而得到的. 对于为什么 ggp ...
- python中options设置_如何在AngularJS的ng-options中设置value属性?
小编典典 ngOptions(可选) – { comprehension_expression=} –以下形式之一: 对于数组数据源 : label for value in array select ...
- Linux嵌入式网络 _ 网络信息检索、网络属性设置、超时检查、心跳检测
一.网络信息检索 1.网络信息检索 常用函数 gethostname(); 获得主机名 getpeername(); 获得与套接字相连的远程协议地址 getsockname(); ...
- cdr对象管理器怎么用_CorelDRAW中默认对象属性管理教程-cdr默认对象属性设置方法_好特教程...
CorelDRAW 中的默认对象属性可控制活动文档中文本和图形对象的外观.例如,当您第一次安装 CorelDRAW 时,图形对象的默认属性将确定每个新图形对象都具有黑色轮廓并且没有填充. 您可以修改以 ...
- maya对象属性_超详细!maya软件渲染属性设置说明(一)
了解了通用渲染设置选项命令之后,需要分别对Software Render(软件渲染).Hardware Render(硬件渲染).Hardware 2.0 Render(硬件2.0渲染)和Vector ...
最新文章
- python好找工作吗2017-记2017年年底,几次Python后端面试
- 遍历并批量删除容器中元素出现ConcurrentModificationException原因及处置
- 【新功能,新插件】-全新来袭,CSDN浏览器助手这一款无广告干净界面插件你值得拥有!
- 九度 1479:移位和旋转
- linux学习-使用DHCP动态管理主机地址
- iOS:Xcode7下创建 .a静态库 和 .framework静态库
- android多国语言使用
- 不等式解集怎么取_6.初中数学:一个不等式的解集,都是另一个不等式的解,求a的取值范围?...
- 算法竞赛入门经典——1
- 解决JS代码注释无效
- 2021年最新程序员培训机构排名,学习前避坑必看
- 共享LPT口打印机打印时,注意事项
- 学生用计算机重启,学生用计算器咋关机
- 智慧停车(三) IOT选型-电信物联网
- 转行IT,零基础学什么技术比较好?
- 六种不同型号的电灯泡
- Xamarin.Forms学习之路——黑猫时钟App
- Redis主从复制(薪火相传模式 演示示例)——图解版
- 创建新Docker容器时出现“The container name “/xxx“ is already in use by container xxxxxxxxxxx...”问题的解决办法
- Centos 7安装java 17
热门文章
- 支付宝沙箱环境的使用----详细教程
- 帝国网站导航config.php,帝国cms导航当前页面高亮实现另类方法:灵动标签+逻辑非...
- 按照图片名称移动到文件夹中保存
- kmp(看毛片)算法
- 一文带你了解android的root原理
- Java苹果手机缩略图旋转_Java实例使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)...
- Python3,网站搭建之数据库表设计及数据存储!文末的彩蛋,我酸了~
- 百人计划 图形2.2 模型与材质基础
- 关于线下《三国杀》流局问题的若干思考
- win10屏幕亮度调不了(Win10屏幕亮度)