当前位置: 首页 > news >正文

Lombok常见用法总结

目录

  • 一、下载和安装
  • 二、常见注释
    • (一)@Data
    • (二)@Getter和@Setter
    • (三)@NonNull和@NotNull(不常用)
    • (四)@ToString(不常用)
    • (五)@EqualsAndHashCode
    • (六)@Cleanup(很实用但是很小众)
    • (七)构造器注释@AllArgsConstructor和@NoArgsConstructor和@RequiredArgsConstructor
    • (八)@Builder
    • (九)@val

一、下载和安装

在idea中下载安装设置enable即可在这里插入图片描述

二、常见注释

(一)@Data

注在类上, 是@ToString, @EqualsAndHashCode, @Getter, @Setter和@NoArgsConstructor的结合。
提供无参构造器,get方法,set方法,重写hashCode,equals,toString方法。

Aoo aoo = new Aoo();
aoo.setAttr3(true);
aoo.setAttr2("2222");
System.out.println(aoo.toString()+aoo.getAttr2());
Aoo aoo2 = new Aoo();
System.out.println(aoo.equals(aoo2)+"----");
@Data
public class Aoo {private String attr1;private String attr2;private boolean attr3;}

注意,@Data只提供无参构造器,没有全参构造器,如果需要无参构造器和全参构造器则需要将这几个注释同时使用

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Aoo {private String attr1;private String attr2;private boolean attr3;
}

(二)@Getter和@Setter

既可以用在类上,也可以用在单独的属性上。

// @Getter可以用在实体类上
// @Setter
public class Aoo {private String attr1;private String attr2;@Getter@Setterprivate boolean attr3;
}

如果类没有使用@Data,那么可以单独需要get和set方法的属性进行设置。
并且,如果使用了boolean 类的属性,那么使用的时候,如下:

Aoo aoo = new Aoo();
aoo.setAttr3(true);
// 这里不再是getAttr3(),而是isAttr3()
System.out.println(aoo.isAttr3());

所以,如果类已经标注了@Data,就不用再使用@Setter和@Getter了。

@Getter和@Setter可以设置访问级别(默认为public)(搞不懂的去回忆一下访问修饰符)
例如:@Setter(AccessLevel.PROTECTED)

  • AccessLevel.PUBLIC, //所有类可以访问
  • AccessLevel.MODULE, // 同模块的可以访问
  • AccessLevel.PROTECTED, // 只有子类可以访问
  • AccessLevel.PACKAGE,// 只有同包可以访问
  • AccessLevel.PRIVATE, // 只有本类可以访问
  • AccessLevel.NONE; // 都不让访问

(三)@NonNull和@NotNull(不常用)

将在方法/构造函数体的开头插入一个空检查,抛出一个带有参数名称的NullPointerException作为消息。
这两个真的不常用,我一般用@Validate来限制字段不能为空

(四)@ToString(不常用)

自定义对象的toString方法
其中有一个属性exclude,代表被排除的属性,toString的时候,排除该属性
其中还有一个属性of,代表被包含的属性,toString的时候,只需要那些属性

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString(callSuper = true,exclude = "attr1")
public class Aoo {private String attr1;private String attr2;private boolean attr3;}

(五)@EqualsAndHashCode

重写equals和hashCodef方法,
其中的exclude属性代表需要排除的equals和hashcode的属性有哪些。
其中of属性代表需要计入的属性有哪些。

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(exclude = {"attr1","attr2"})
public class Aoo {private String attr1;private String attr2;private boolean attr3;}

注意:但是一般不怎么用这个,会在stream留里面自定义比较器

(六)@Cleanup(很实用但是很小众)

在用一些输入输出流需要在finally中关闭的时候,如果添加了这个注解,就可以不写fanally了

String file = "XXX/XXX/XXX.zip";
File file1 = new File(file);
try{// 如果此处使用了@Cleanup,就可以不写finally了,在流使用完后自动关闭@Cleanup FileInputStream fis = new FileInputStream(file1);int c;while ((c = fis.read()) > 0) {// 业务逻辑}
}catch{throw new XXXEXception("XXXXXXX");
}finally{fis.close();
}

(七)构造器注释@AllArgsConstructor和@NoArgsConstructor和@RequiredArgsConstructor

  • @AllArgsConstructor 全参构造器,
  • @NoArgsConstructor提供无参构造器
    有一个很容易报错的点:如果一个类没有会成员变量,同时使用了@AllArgsConstructor和- - @NoArgsConstructor会报错构造器重复的错
  • @RequiredArgsConstructor 生成带有所需参数的构造函数。
    这个不常用

(八)@Builder

让实体类使用构造者模式创建对象

@Data
@Builder
public class Aoo {private String attr1;private String attr2;private boolean attr3;}
public static void main(String[] args){Aoo aoo = Aoo.builder().attr1("attr1").attr2("attr2").attr3(true).build();System.out.println(aoo+"----");}

(九)@val

类型将从初始化表达式中推断出来。

@val
public class Aoo {private void doIt(){// 类型将从初始化表达式中推断出来val name = "张三";val type = 2;System.out.println(name+type);}
}

相关文章:

Lombok常见用法总结

目录一、下载和安装二、常见注释(一)Data(二)Getter和Setter(三)NonNull和NotNull(不常用)(四)ToString(不常用)(五&#…...

【Ajax】异步通信

一.概述 概念:AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML 作用: 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据 使用了AJAX和服务器进行通信,就可以使…...

近红外吸收荧光染料IR-808,IR-808 NH2,IR-808 amine,发射808nm 性质分享

中文名称:IR-808 氨基英文名称:IR-808 NH2,IR-808 amine,IR-808-NH2规格标准:10mg,25mg,50mgCAS:N/A产品描述:IR-808,发射808nm,酯溶性染料修饰氨…...

一图来看你需要拥有那些知识储备

技术实践 数据 关系型数据 MySQLSQLServerOraclePostgrSQLDB2 大数据存储 RedisMemcacheMongoDBHBaseHive 大数据处理 Hadoop 数据报表看板 DataGearGrafanaKibanaMetaBase 消息对列 Rabbit MQRock MQActive MQKafka 大数据搜索 SolrElasticSearchLucenHive 服务提…...

复位和时钟控制(RCC)

目录 复位 系统复位 电源复位 备份区复位 时钟控制 什么是时钟? 时钟来源 二级时钟源: 如何使用CubeMX配置时钟 复位 系统复位 当发生以下任一事件时,产生一个系统复位:1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWD…...

OpenWrt 专栏介绍00

文章目录OpenWrt 专栏介绍00专栏章节介绍关于联系方式OpenWrt 专栏介绍00 专栏章节介绍 本专栏主要从开发者角度,一步步深入理解OpenWrt开发流程,本专栏包含以下章节,内如如下: 01.OperWrt 环境搭建02.OperWrt 包管理系统03.Op…...

udk开发-稀里糊涂

一、EDK2简介 1.EDK2工作流 ​ 二、EDK2 Packages 1.Packages介绍 ​ EDK2 Packages是一个容器,其中包含一组模块及模块的相关定义。每个Package是一个EDK2单元。 整个Project的源代码可以被分割成不同的Pkg。这样的设计不仅可以降低耦合性,还有利于分…...

Java之内部类

目录 一.内部类 1.什么是内部类 2.内部类存在的原因 3. 内部类的分类 4.内部类的作用 二.成员内部类 1.基本概念 2.成员内部类的注意点 1.成员内部类可以用private方法进行修饰 2.成员内部类可以直接访问外部类的私有属性 3.外部类可以通过对象访问内部类的私有属性 …...

【MyBatis】篇二.MyBatis查询与特殊SQL

文章目录1、MyBatis获取参数值case1-单个字面量类型的参数case2-多个字面量类型的参数case3-map集合类型的参数case4-实体类类型的参数case5-使用Param注解命名参数总结2、MyBatis的各种查询功能case1-查询结果是一个实体类对象case2-查询结果是一个List集合case3-查询单个数据…...

CE认证机构和CE证书的分类

目前,CE认证已普遍被应用在很多行业的商品中,也是企业商品进入欧洲市场的必备安全合格认证。在船舶海工行业中,也同样普遍应用,很多时候,对于规范中没有明确认证要求的设备或材料,而船舶将来还会去欧洲水域…...

Lesson 8.2 CART 分类树的建模流程与 sklearn 评估器参数详解

文章目录一、CART 决策树的分类流程1. CART 树的基本生长过程1.1 规则评估指标选取与设置1.2 决策树备选规则创建方法1.3 挑选最佳分类规则划分数据集1.4 决策树的生长过程2. CART 树的剪枝二、CART 分类树的 Scikit-Learn 快速实现方法与评估器参数详解1. CART 分类树的 sklea…...

【Unity】程序集Assembly模块化开发

笔者按:使用Unity版本为2021.3LTS,与其他版本或有异同。请仅做参考 一、简述。 本文是笔者在学习使用Unity引擎的过程中,产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/脚本/Unity 架构/脚本编译/程序集定义相关部分结…...

马尔可夫决策过程

1. 马尔可夫决策过程 马尔可夫决策过程不过是引入"决策"的马氏过程. Pij(a)P{Xn1j∣X0,a0,X1,a1,...,Xni,an1}P{Xnn1j∣Xni,ana}\begin{split} P_{ij}(a) & P\{X_{n1} j|X_0, a_0, X_1, a_1, ..., X_n i, a_n 1\} \\ &P\{X_n{n1} j|X_n i, a_n a\} \e…...

win11下载配置CIC Flowmeter环境并提取流量特征

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、下载CIC Flowmeter二、安装java、maven、gradle和IDEA1.java 1.82.maven3.gradle4.IDEA三、CICFlowMeter-master使用四、流量特征1.含义2.获取前言 配了一整…...

JDK如何判断自己是什么公司的

0x00 前言 因为一些事情,遇到了这样一个问题,JDK如何判断自己是什么公司编译的。因为不同的公司编译出来,涉及到是否商用收费的问题。 平时自己使用的时候,是不会考虑到JDK的编译公司是哪一个,都是直接拿起来用&#…...

大数据技术之HBase(二)HBase原理简介

一、HBase定义1.1 HBase定义HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库非结构化数据存储的数据库,基于列的模式存储。利用Hadoop HDFS作为其文件存储系统,写入性能很强,读取性能较差。利用Hadoop MapReduce来处理HBase中的…...

垒骰子(爆搜/DP)

动态规划方格取数垒骰子方格取数 题目描述 设有 NNN \times NNN 的方格图 (N≤9)(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 000。如下图所示(见样例): A0 0 0 0 0 0 0 00 0 13 0 …...

Telink之标准SDK的介绍_1

前提:常见的项目架构:应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个): algorithm,application,boot,common,drivers,proj_lib,stack,v…...

JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理

目录 0 前言 1 准备工作介绍 2 一维数组 2.1 return形式 2.2 参数形式 3 二维数组 3.1 return形式 3.2 参数形式 4 三维数组 4.1 return形式 4.2 参数形式 5 测试代码 6 结果说明 0 前言 就如之前我写过的一篇文章【JNI内形参从C代码中获取返回值并返回到Java层使…...

快递计费系统--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例5:快递计费系统 快递行业高速发展,我们邮寄物品变得方便快捷。某快递点提供华东地区、华南地区、华北地区的寄件服务,其中华东地区编号为01、华南地区编号为02、华北地区编号为03,该快递点寄件价目表具体如表1所示。 表1 寄…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?

无论是建筑施工、软件开发&#xff0c;还是市场营销活动&#xff0c;项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素&#xff0c;项目很容易陷入混乱&#xff0c;导致进度延误、成本超支&#xff0c;甚至失败。 项目进度管理软…...