lombok有参构造注解_Java高效开发工具: Lombok

16ed0f5cdd5cc33ac625b472cc2a2004.png

Lombok, 一个Java开发必备效率工具,可以大大避免编写一些常用方法(get/set, hashcode等),简化开发。虽然现在IDE很多都可以通过快捷键生成POJO的一些方法了,但是如果该POJO字段发生变动后,还是需要程序员再次手动重新生成相关方法。而Lombok只需要使用注解即可,且是在代码编译期间将注解替换为相应的代码,而非通过反射。同时会使得源码文件更简洁

配置

IDEA环境下的的Lombok的配置:

1. 首先在Maven中添加Lombok包

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version></dependency>

2. 在IDEA的Plugins Marketplace 中搜索安装 IntelliJ Lombok plugin 插件

POJO 方法

POJO类的很多方法get、setequals、canEquals、hashCode、toStringConstructor 都可以通过Lombok的相关注解实现

@Data 注解

放置在类上,为该类的所有属性添加get、set方法,为该类添加equals、canEquals、hashCode、toString方法。非常适用于POJO类。

示例源码如下:

@Data
class Pc1 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,可以看到提供了上述提到的所有方法,并且源码依然很简洁

a1c8bfd58b9813b31185355e34b0c4c2.png

Note:

如果无构造器方法,Java会提供一个默认的无参构造器。所以class文件中的那个无参构造器可不是Lombok的功劳哦~

@Getter, @Setter 注解

  • 放置在属性上,为该属性添加Get/Set方法

示例源码如下:

class Pc2 implements Serializable
{private static final long serialVersionUID = 1;private int id;@Setterprivate double prcie;@Getterprivate String pcname;
}

编译后class文件如下,可以看到字段上添加了相应的方法

bfe57d73f465f4239f68c7a6d9798abb.png
  • 放置在类上,则为该类的所有属性添加Get/Set方法

@EqualsAndHashCode 注解

放置在类上,为该类添加equals、canEqual、hashCode方法

示例源码如下:

@EqualsAndHashCode
class Pc5 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,该类添加了equals、canEqual、hashCode方法

2de32493e0ca85579bc516b68bffa16b.png

@ToString 注解

放置在类上,为该类添加toString方法

示例源码如下:

@ToString
class Pc6
{private int id;private double price;private String pcname;
}

编译后class文件如下,该类添加了toString方法

415d4fd75dc13de427e02051539c3928.png

构造器: @AllArgsConstructor 注解

放置在类上,为该类添加一个全参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器

示例源码如下:

@AllArgsConstructor
class Pc3 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,该类添加了一个全参构造器

620d6087842e5b7ffe593f4db56b413b.png

构造器: @NoArgsConstructor 注解

放置在类上,为该类添加一个无参构造器

示例源码如下:

@NoArgsConstructor
class Pc4 implements Serializable
{private static final long serialVersionUID = 1;private int id;private double prcie;private String pcname;
}

编译后class文件如下,该类添加了一个无参构造器

6e4de97d125eed95ec6cf0bb756d1924.png

@NonNull

放置在属性上,将对该属性进行非空检查,如果为空(null),将会抛出NullPointerException;同时为该类添加一个由所有@NonNull属性组成的有参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器

示例代码如下:

@Data
class Pc7
{@NonNullprivate Integer id;private double price;private String pcname;
}

编译后class文件如下,该类中对id属性的操作均进行了非空检查,添加了一个所有@NonNull属性组成(id属性)的有参构造器

7aee254f74985947ef7db06643aa9c8a.png

@RequiredArgsConstructor 注解 简化依赖注入

通常我们在实现Spring依赖注入,常常是在需要注入的属性添加@Autowired注解实现(如下所示)。但如果一个类下有很多属性需要注入时,@Autowired就要写一堆了……

...@Controllerpublic class Controller1{@Autowiredprivate Service1 service1;@Autowiredprivate Service2 service2;...}

这里可以使用这里@RequiredArgsConstructor注解来简化依赖注入操作:首先需要将该注解放在类上,然后在 需要注入的属性前添加final(用法1) 或 在需要注入的属性上添加注解@NonNull(用法2)

对上述示例的改进写法如下:

...@RequiredArgsConstructor(onConstructor = @__(@Autowired))@Controllerpublic class Controller1{// 用法 1private final Service1 service1;// 用法 2@NonNullprivate Service2 service2;...}

用法1 和 用法2 虽然效果一样,但是很明显用法1更常用……

log对象

@Log4j

放置在类上,为该类添加一个属性名为log的Log4J日志对象

示例源码如下:

@Log4jpublic class Student {        private int id;private String username;private String sex;private String address;...}

编译后的class文件如下,该类添加了一个属性名为log的Log4J日志对象

24125e469064ab7c7be09410f0617c0f.png

@Slf4j

放置在类上,为该类添加一个属性名为log的SLF4J日志对象

示例源码如下:

import lombok.extern.slf4j.Slf4j;@Slf4jpublic class User {private int id;private String name;private int age;public int getAge() {log.error("SLF4J getAge: " + age );log.debug("SLF4J getAge: " + age );return age;}...}

编译后的class文件如下,该类添加了一个属性名为log的SLF4J日志对象

bf5447a8649371f0db926f452a6c690d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript操作大全整理(思维导图三--函数基础)

3.JavaScript函数基础 转载于:https://www.cnblogs.com/yuxia/p/3360806.html

__attribute__ 之weak,alias属性

Weak Alias 跟 Weak Reference 完全没有任何关系&#xff0c;不过是我在看到 Weak Reference 的时候想到的而已。 Weak Alias 是 gcc 扩展里的东西&#xff0c;实际上是函数的属性。这个东西在库的实现里面可能会经常用到&#xff0c;比如 glibc 里面就用了不少。抄录一段 gcc …

nginx指定配置文件启动_NGINX安全加固手册

NIGNX系统安全基线规范1.概述1.1 适用范围本配置标准的使用者包括&#xff1a;各事业部服务器负责人。 各事业部服务器负责人按规范要求进行认证、日志、协议、补丁升级、文件系统管理等方面的安全配置要求。对系统的安全配置审计、加固操作起到指导性作用。1.2 文档内容本文档…

口袋网咖已有服务器在使用怎么注销,口袋网咖_口袋网咖常见问题_口袋网咖专区...

口袋网咖是专门为游戏高玩打造的手机变电脑软件&#xff0c;虚拟电脑神器&#xff0c;体验各种电脑游戏&#xff0c;非常的方便&#xff0c;能让小伙伴尽情的体验手机电脑的感觉&#xff0c;很多小伙伴在使用过程中遇到了一些问题&#xff0c;快啦网为大家分享口袋网咖常见问题…

p

都不知道简历去投什么地方。游戏都卖不出去&#xff0c;又做不出口碑好的。这些人是心存侥幸还是心存坚持。 感觉自己搞不清楚就很难再出发。转载于:https://www.cnblogs.com/YOUEN/p/3364227.html

bbb u-boot 验证 emmc

目标&#xff1a; 参考"common/cmd_mmc.c"的查找emmc的代码&#xff0c;在mmc总线初始化函数后&#xff0c;遍历mmc总线&#xff0c;查找emmc并 打印emmc信息。 在"drivers/mmc/mmc.c"中的mmc_initialize函数的最后面添加我们的遍历函数 int mmc_initia…

统计个人已完成的工作量_团队工作量及团队价值贡献统计、核算、评审及提升的重要性...

在推行阿米巴经营模式时&#xff0c;需要进行企业内部产品及服务全价值分析&#xff0c;也就是企业内部团队产品及服务价值增值的全过程分析&#xff0c;团队价值增值是团队存在的目的和意义&#xff0c;对于团队经营来讲&#xff0c;团队工作量就团队的收入&#xff0c;团队价…

hyper服务器虚拟网卡和实际网卡,Hyper-V 3 虚拟网卡带宽应用限制

Windows Server 2012的Hyper-V 3中&#xff0c;打来了系列新功能&#xff0c;例如网卡流量限制功能。 基础架构注意的问题宿主服务器规划过程中&#xff0c;管理员主要考虑服务器基础架构中的CPU、内存、磁盘空间等必要因素&#xff0c;但是网络适配器(简称网卡)通常属于被忽略…

数据结构--------------静态表的希尔排序

#define LT(a,b) ((a)< (b))#define EQ(a,b) ((a)(b))#define LQ(a,b) ((a)<(b)) typedef struct ElemType{//表中元素结构 int key; char name[20];}ElemType; typedef struct SSTable{//静态表结构 ElemType *elem; int length;}SSTable; ElemType r[20];//全局变量,用…

智能集群理论优化控制_数学学科学术报告九:机器人集群的智能协同控制方法_中国计量大学...

数学学科学术报告九&#xff1a;机器人集群的智能协同控制方法_中国计量大学中国计量大学 免费考研网/2018-05-17报告题目&#xff1a;机器人集群的智能协同控制方法报告人&#xff1a;孙长银(东南大学 教授)报告时间&#xff1a;2018.04.09 15:30-16:30报告地点&#xff1a;格…

css复选框如何调大一些,创建CSS放大复选框

您可以随时使用复选框来勾选自己的复选框.这允许更多的跨浏览器兼容的解决方案.我做了一个快速演示here,显然你必须得到一个透明的.png的滴答,而不是我得到的.input[typecheckBox]:checked ~ div label{background: url(http://ramyasspace.files.wordpress.com/2011/06/tick.j…

outside of class is not definition

有一种可能的情况&#xff1a;You have semicolons (;) at the end of all your function definitions making the compiler think theyre declarations. 即在方法定义的后面都误添加上了";",导致编译器认为这仅仅是个声明。

Makefile中=、:=、+=、?=的区别

&#xff0c;就是基本的赋值 :&#xff0c;覆盖原来的值 &#xff0c;添加新值 ?&#xff0c;如果没有赋值则赋值转载于:https://www.cnblogs.com/wangluojisuan/p/3369072.html

用python画面积图_Python笔记:用matplotlib绘制面积图

用pyecharts绘制出来的面积图、圆环图太有个性了&#xff0c;未免感觉有点“高处不胜寒”。今晚虽然休息&#xff0c;但继用matplotlib绘制折线图之后&#xff0c;我又心血来潮地想用matplotlib来制作一点面积图&#xff0c;因为这在零售行业也是常用的可视化图形之一。具体如下…

状态机思路在程序设计中的应用

状态机思路在单片机程序设计中的应用 状态机的概念 状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中&#xff0c;必然有状态机的身影浮现。 比如说一个按键命令解析程序&#xff0c;就可以被看做状态机&#xff1a;本来…

css 实现标签切换,CSS_纯CSS实现Tab切换标签效果代码,本文实例讲述了纯CSS实现Tab切 - phpStudy...

纯CSS实现Tab切换标签效果代码本文实例讲述了纯CSS实现Tab切换标签效果代码。分享给大家供大家参考。具体如下&#xff1a;这是一款纯CSS实现的Tab简洁版&#xff0c;很不错的效果&#xff0c;希望大家喜欢。运行效果截图如下&#xff1a;在线演示地址如下&#xff1a;http://d…

IBM T410 打开AHCI模式

笔记本初始安装WINDOWS 7时&#xff0c;BIOS中SATA硬盘被设置为兼容模式&#xff0c;更高性能的ahci模式无法使用&#xff0c;表现为启动蓝屏。解决方法如下&#xff1a; 1&#xff09; 如果无法正常启动&#xff0c;先将BIOS中SATA硬盘改回为兼容模式启动windows 7。具体是在…

卷积核_漫画:卷积神经网络中的卷积核到底是什么?

卷积计算的直观体现如上所示&#xff0c;一张汽车图片经过了多次卷积操作&#xff0c;一开始卷积在提取低层次的特征(检测边缘)&#xff0c;然后逐渐提取高层次的特征(完整的物体)不同的卷积探测器我们可以看到同一张图片经过不同的卷积核&#xff0c;得到的结果是不一样的&…

bbb sdk6编译流程

1. 编译用于ftp启动的镜像 1) uboot make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- Oflash-restore am335x_evm_restore_flash_usbspl 生成的u-boot.img在flash-restore目录下&#xff0c;拷贝到ftp目录下&#xff0c;并改名为u-boot-restore.img 生成的u-boot-spl.bin…

UVa 297 - Quadtrees

题目&#xff1a;利用四叉树处理图片&#xff0c;给你两张黑白图片的四叉树&#xff0c;问两张图片叠加后黑色的面积。 分析&#xff1a;搜索、数据结构。把图片分成1024块1*1的小正方形&#xff0c;建立一位数组记录对应小正方形的颜色。 利用递归根据字符串&#xff0c;建立相…