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

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

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

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

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

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

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

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

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

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

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

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

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

如何打开win7禁用的无线网卡服务器,Windows7如何使用批处理开启/禁用无线网卡...

对于无线网卡&#xff0c;Win7笔记本用户应该都不会陌生&#xff0c;许多笔记本用户都是在自己的电脑上安装了无线网卡之后&#xff0c;使用无线网络进行联网的&#xff0c;不过对于一些有线用户来说&#xff0c;无线网卡就显得并不太重要了。因此&#xff0c;今天小编就教大家…

超声声场模拟_超声全聚焦(TFM)简介

应读者要求&#xff0c;小编将介绍一下全聚焦TFM的基础知识。如有讲解不对的&#xff0c;欢迎批评指正。全聚焦是超声检测里面的新事物。早在2005前&#xff0c; Caroline Holmes、Paul D. Wilcox等国外学者就开始研究了全聚焦成像&#xff0c;并通过实验得出了TFM相对于常规相…

post修改服务器数据源,postgresql安装及配置超详细教程

1. 安装根据业务需求选择版本&#xff0c;官网下载初始化数据库执行完初始化任务之后&#xff0c;postgresql 会自动创建和生成两个用户和一个数据库&#xff1a;linux 系统用户 postgres&#xff1a;管理数据库的系统用户&#xff1b;密码由于是默认生成的&#xff0c;需要在系…

小程序分享到朋友圈_如何给小程序添加分享朋友圈

微信公众号更新以后&#xff0c;推送不是按照优先来的&#xff0c;你们可以把我的微信公众号点击设置为星标&#xff0c;以便于及时的接收信息.从微信小程序官方分享朋友圈有那么几天了,今天就分享下如何给自己的小程序添加分享朋友圈代码,几行代码的事。根据官方的提示需要基础…

JS代码大全

一、验证类 1、数字验证内 1.1 整数 /^(-|\)?\d$/.test(str) 1.2 大于0的整数 &#xff08;用于传来的ID的验证) /^\d$/.test(str) 1.3 负整数的验证 /^-\d$/.test(str) 2、时间类 2.1 短时间&#xff0c;形如 (13:04:06) function isTime(str) …

eclipse中查看mysql_eclipse中怎样查看sqlite数据库的表

string createtable(classclazz , string tablename){//实例化一个容器&#xff0c;用来拼接sql语句stringbuffer sbuffer new stringbuffer();//sql语句&#xff0c;第一个字段为_id 主键自增&#xff0c;这是通用的&#xff0c;所以直接写死sbuffer.append("create tab…

敏捷开发之Scrum扫盲篇

现在敏捷开发是越来越火了&#xff0c;人人都在谈敏捷&#xff0c;人人都在学习Scrum和XP... 为了不落后他人&#xff0c;于是我也开始学习Scrum&#xff0c;今天主要是对我最近阅读的相关资料&#xff0c;根据自己的理解&#xff0c;用自己的话来讲述Scrum中的各个环节&#x…

macos xampp mysql 命令_MAC系统XAMPP 中 MySQL命令行client配置使用

在PHP的学习过程中。MySQL预计是必定会接触的。MySQL的管理相信大家也会使用phpmyadmin&#xff1a;好吧。phpmyadmin的确是MySQL管理的神器&#xff0c;你想要的。他好多都有&#xff0c;在开发的过程中。对于后台数据库的设计架构帮助真的非常大。可是。在这篇文章的主角确不…

]Kinect for Windows SDK开发入门(六):骨骼追踪基础 上

原文来自&#xff1a;http://www.cnblogs.com/yangecnu/archive/2012/04/06/KinectSDK_Skeleton_Tracking_Part1.html Kinect产生的景深数据作用有限&#xff0c;要利用Kinect创建真正意义上交互&#xff0c;有趣和难忘的应用&#xff0c;还需要除了深度数据之外的其他数据。这…

Daily Scrum 10.29

时间越来越紧迫&#xff0c;不过大家逐渐进入了状态。虽然在有些问题上大家意见有些不同&#xff0c;但是最终还都是为着团队着想&#xff0c;很好地达成一致了。 MemberToday’s Task Tomorrow’s Task李孟 task615 测试(活动) task571 完成daily scrum 10.29撰文 task615 测试…

python中list index out of range_Python知识精解:str split()方法

描述split()函数是Python字符串函数。split() 通过指定分隔符对字符串进行切片。如果指定了整型参数num&#xff0c;则仅分隔num 1个子字符串&#xff08;即分割num次&#xff09;。使用split()函数将字符串分割后&#xff0c;返回的是一个列表&#xff0c;列表中存储着分割后…

ashx连接mysql_对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结

基本对比使用方式使用场合优缺点是否需要安装需要的dll网址引用方式程序内引用程序初期确定使用MySql&#xff0c;前期添加引用大多数情况下使用在类文件内&#xff0c;多数使用于aspx&#xff0c;ashx等带有后置代码的类文件中可以安装&#xff0c;也可以直接引用dll 多数情况…

mysql -b -e_MySQL 的B+树索引.

一、B树索引概述索引是应用程序设计和开发的一个重要方面。若索引太多&#xff0c;应用程序的性能可能会受到影响(需维护索引的结构和数据)&#xff1b;而索引太少&#xff0c;对查询性能又会产生影响。二叉树&#xff0c;左子树的键值总是小于根的键值&#xff0c;右子树的键值…