当前位置: 首页 > 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);}
}
http://www.lryc.cn/news/33234.html

相关文章:

  • 【Ajax】异步通信
  • 近红外吸收荧光染料IR-808,IR-808 NH2,IR-808 amine,发射808nm 性质分享
  • 一图来看你需要拥有那些知识储备
  • 复位和时钟控制(RCC)
  • OpenWrt 专栏介绍00
  • udk开发-稀里糊涂
  • Java之内部类
  • 【MyBatis】篇二.MyBatis查询与特殊SQL
  • CE认证机构和CE证书的分类
  • Lesson 8.2 CART 分类树的建模流程与 sklearn 评估器参数详解
  • 【Unity】程序集Assembly模块化开发
  • 马尔可夫决策过程
  • win11下载配置CIC Flowmeter环境并提取流量特征
  • JDK如何判断自己是什么公司的
  • 大数据技术之HBase(二)HBase原理简介
  • 垒骰子(爆搜/DP)
  • Telink之标准SDK的介绍_1
  • JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理
  • 快递计费系统--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
  • JS - 自定义一周的开始和结束,计算日期所在月的周数、所在月第几周、所在周的日期范围
  • Linux :理解编译的四个阶段
  • 197.Spark(四):Spark 案例实操,MVC方式代码编程
  • Vue 项目如何迁移小程序
  • unit1-问候以及介绍
  • 杂记——19.git上传时出现the remote end hung up unexpectedly错误
  • python123平台题目
  • ROS学习笔记(六):TF坐标变换
  • 【python】为你绘制玫瑰一束,爱意永存
  • 智能家居创意产品一Homkit智能通断器
  • 【数据库】MySQL表的增删改查(基础命令详解)