【代码规范】lombok注解使用

news2024/9/24 19:27:30

【代码规范】lombok注解使用

    • 一、前言
    • 二、常用注解
    • 三、使用示例

一、前言

上一篇文章(【JVM知识】插入式注解处理器实现java编程规范检测)总结了一下插入式注解,我们知道lombok插件是通过插入式注解处理器实现的,并且lombok插件在工作中用的比较多,所以再总结一下lombok常用注解

在这里插入图片描述
在这里插入图片描述
请添加图片描述
lombok官网地址

二、常用注解

@Getter/@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor
@Data
@Value
@Builder
@Slf4j
@Accessors
@SneakyThrows
@Synchronized
@Cleanup

三、使用示例

1、使用@Getter/@Setter来代替 getter 和 setter 方法使代码更简洁
@EqualsAndHashCode注解通过of属性指定参与equals hashcode字段
@ToString注解通过of属性 可以配置字段

@Getter
@Setter
@EqualsAndHashCode(of = {"name","age"})  //指定参与equals hashcode字段
@ToString(of = {"name","age"}) //toString 可以配置字段
private static class User01{
  private String name;
  private Integer age;
  private Byte sex;
}

2、Lombok提供了一系列的关于构造器的注解,包括无参构造器和有参构造器。

  • @NoArgsConstructor 为实体类生成无参的构造器方法
  • @AllArgsConstructor 为实体类生成除了static修饰的字段之外带有各参数的构造器方法。
  • @RequiredArgsConstructor 为实体类生成指定字段的构造器方法,而这些字段需要被 final,或者 @NonNull 修饰。
@NoArgsConstructor(access = AccessLevel.PRIVATE) //无参构造函数
    @AllArgsConstructor //全参构造函数
    private static class User02{
        private String name;
        private Integer age;
        private Byte sex;
    }

3、@Value所有的成员变量都是 final 的,没有 setter 方法,适合加在值不希望被改变的类上,像是某个类的值当创建后就不希望被更改,只希望读它而已

@Data
    @Value
    private static class User03{
        private String name;
        private Integer age;
        private Byte sex;
    }

4、@Builder 是一个非常强大的注解,提供了一种基于建造者模式的构建对象的 API。使用 @Builder 注解为给我们的实体类自动生成 builder() 方法,并且直接根据字段名称方法进行字段赋值,最后使用 build()方法构建出一个实体对象。

@Builder
    private static class User04{
        private String name;
        private Integer age;

        @Singular("addDog")
        private List<String> dogs;

        public static void main(String[] args) {
            User04 user04 = User04.builder().name("张三").age(18).addDog("大黄").addDog("二哈").build();
            System.out.println(user04);
        }
    }

5、@SneakyThrows等同于public void exceptionTest() throws Exception{}

@SneakyThrows
    public void exceptionTest(){
        Thread.sleep(1000);
    }

6、@Synchronized等同于public synchronized void concurrency(){}

@Synchronized
    public void concurrency(){

    }

7、@Cleanup可以关闭流

public void copyFile(String in,String out) throws Exception {
        @Cleanup FileInputStream inputStream = new FileInputStream(in);
        @Cleanup FileOutputStream outputStream = new FileOutputStream(out);
        byte[] b = new byte[65536];
        while(true){
            int r = inputStream.read();
            if(r == -1){
                break;
            }
            outputStream.write(b,0,r);
        }
    }

8、@Accessors(fluent = true) 注解没有set和get方法,易读性不是很好

@Data
    @Accessors(fluent = true)  //没有set和get
    private static class User05{
        private String name;
        private Integer age;

        public static void main(String[] args) {
            User05 user05 = new User05();
            user05.age(16);
            System.out.println(user05.age());
        }
    }

9、@Accessors(chain = true) 注解链式设置对象参数

@Data
    @Accessors(chain = true)  
    private static class User06{
        private String name;
        private Integer age;

        public static void main(String[] args) {
            User06 user06 = new User06();
            user06.setName("张三").setAge(16);
            System.out.println(user06.toString());
        }
    }

10、@FieldNameConstants作用于类,生成一个包含所有成员变量的内部类或者内部枚举,内部类中每个字段值即为字段名,并且内部类字段值不可变

属性说明:

  • value:设置内部类或者枚举的访问控制符,默认为 public 共有
    PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONE MODULEJava 9
    的新特性
    ,NONE 表示不生成 setter 方法,即停用注解功能
  • asEnum:是否为枚举类型,默认 false
  • innerTypeName:设置内部类或枚举名,默认值:“”,默认内部类名:Fields
  • onlyExplicitlyIncluded:仅包含标记为 @FieldNameConstants.include的字段,默认为
    false
  • Include:设置包含哪些字段
  • Include 只有在 onlyExplicitlyIncluded = true 时才会生效,Include
    标记在需要包含的属性或方法上 当 onlyExplicitlyIncluded = true 时,则必须搭配 Include
    使用,否则没有任何效果
  • Exclude:设置不包含哪些字段
@FieldNameConstants(innerTypeName = "刘能", asEnum = true, level = AccessLevel.PRIVATE, onlyExplicitlyIncluded = true)
public class ZhangTianAi {
	@FieldNameConstants.Include
	private String name;
	
	@FieldNameConstants.Exclude
	private Integer age;
	
	public static void main(String[] args) {
		System.out.println(刘能.name);
	}
}

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

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

相关文章

版本控制器Git的使用。

目录 一、分布式版本工具 1、基本介绍 2、Git 安装配置 3、本地仓库和基础指令 二、分支 1、分支概述 2、解决冲突 三、Git远程仓库 1、常用的托管服务[远程仓库] 2、配置SSH公钥 3、操作远程仓库 4、解决合并冲突 三、IDEA中使用Git 1、在Idea中配置Git 2、ID…

什么是用户标签体系?

一.概况 标签&#xff1a;对某一类特定群体或对象的某项特征进行抽象分类和概括 标签体系&#xff1a;根据用户的“基本属性”&#xff0c;“行为特征”&#xff0c;“社交网络”&#xff0c;“心理特征” 和 “兴趣爱好”等&#xff0c;把个性化的用户&#xff0c;打上标签化…

入门:认识容器镜像

要启动容器最关键的就是镜像&#xff0c;我们来看看镜像相关的介绍。 初识容器镜像 首先我们来了解一下镜像的相关操作&#xff0c;比如现在我们希望把某个镜像从仓库下载到本地&#xff0c;这里使用官方的hello-world镜像&#xff1a; docker pull hello-world 只需要输入pull…

【CANN训练营第三季】2022年度第三季进阶班之AI目标属性编辑应用-数据预处理

了解华为的生态已经两年有余&#xff0c;用CANN做过两个模型的转换&#xff0c;跑过推理测试&#xff0c;但是感觉还是对CANN框架一知半解&#xff0c;恰巧看到2022年度第三季度训练营开班&#xff0c;赶紧报名参与上车。 本次课程是进阶版第一节正式课&#xff0c;主要讲解的…

零基础自学Python要多久才能学会?

零基础自学Python要多久&#xff1f;学习Python开发的周期因人而异&#xff0c;由于基础、学习效率不同有的人学习进度快&#xff0c;需要六个月到一年不等&#xff0c;有的人自律性较差可能需要更久的时间才能学会&#xff0c;今天小编分享下6个月学习周期内的自学Python的学习…

数据结构---计数排序

计数排序计数排序JAVA实现计数排序优化存在的问题1&#xff1a;存在的问题2JAVA实现局限性冒泡排序&#xff0c;还是快速排序&#xff0c;都是基于元素之间的比较来进行排序 有一些特殊的排序并不基于元素比较&#xff0c;如计数排序、桶排序、基数排序。 计数排序&#xff1a…

0. Arthas的基本安装和使用

我们慢慢寻找&#xff0c;直到找到我们的方向。 选择了方向&#xff0c;便一往无前。 我们爱那少年&#xff0c;一如爱我们自己。 Arthas 的简介 Arthas 的官方文档: https://arthas.aliyun.com/doc/ Arthas的官方命令文档: https://arthas.aliyun.com/doc/advanced-use.html …

数据结构-难点代码突破(C++实现图广度优先遍历,深度优先遍历,广度/深度优先遍历生成树和森林,广度优先遍历求单源非带权图两点最短路径)

注意&#xff1a;为了简便起见&#xff0c;这里采用邻接矩阵的方式储存图的边信息 文章目录1.邻接矩阵图的广度优先遍历单源非带权图的两点最短路径2. 邻接矩阵图的深度优先遍历3. 广度/深度优先遍历生成树和森林深度优先生成树与森林广度优先遍历生成树与森林图的遍历是指从图…

Compose回忆童年 - 手拉灯绳-开灯/关灯

一、前言 偶然间想到小时候顺着那白色开关垂下来的灯绳&#xff0c;拉一下“咔哒”一声&#xff0c;再拉一下又是“咔哒”一声。当时年龄小感觉新奇总是把灯开了关又关了开的拉着玩&#xff0c;以至于好几次拉坏了开关灯绳。 今天我们在手机上做一个拉不坏的灯绳&#x1f604…

毕业四年,我当初是如何走上编程这条路的!

感概万千&#xff0c;毕业已达4年之久。 想起在大学时期学习编程的事情&#xff0c;感觉很有意义&#xff0c;在此记录回顾一下。 希望自己初心未变&#xff0c;勇往向前 现状与过去 20210706 目前的我是在天津一家公司做前端开发&#xff0c;主要用Python。 从毕业实习到…

入门:容器工作机制概述

我们先来看看Docker的整体架构&#xff1a; 实际上分为三个部分&#xff1a; Docker 客户端&#xff1a;也就是我们之前使用的docker命令&#xff0c;都是在客户端上执行的&#xff0c;操作会发送到服务端上处理。 Docker 服务端&#xff1a;服务端就是启动容器的主体了&#x…

Java项目:SSM网上超市购物商城管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为普通用户、管理员两种角色。前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 管理员角色包含以下功…

毕业设计 单片机温湿度环境检测仪 - stm32 物联网 嵌入式

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长…

Dynamic RSA System 设计与实现

一、背景 在实现了静态的加解密工具后&#xff0c;感觉不够灵活&#xff0c;想设计一个动态生成 RSA KeyPair 的中间系统&#xff0c;暂且称为 Dynamic RSA System&#xff0c;以达到自动化维护信安高墙的效果。 加解密和签名校验工具_余衫马的博客-CSDN博客_校验和工具RSA加…

Zero-sho原先的升级版:hourglass网络:U-Net

ZMFF: Zero-shot multi-focus image fusion &#xff08;ZMFF: Zero-shot 多聚焦图像融合&#xff09; &#xff08;本论文的先导片&#xff1a;ZERO-SHOT MULTI-FOCUS IMAGE FUSION&#xff09; 这是我们之前的扩展工作。在ZMFF,我们做一些改动和改进相比原来的框架。首先&…

数学英语不好,新手学编程难吗?适合学Python吗?

英语不好&#xff0c;上学时考试从来没有超越40分。 数学也不可&#xff0c;很多的东西都还给老师了。 我还能学习编程吗&#xff1f;&#xff1f;&#xff1f; 刚开始学习的时分&#xff0c;这个问题深深的困扰着我。以致于我其时报培训班之前犹疑了很长很长时刻。 由于在我…

[C语言数据结构]万字长文带你学习八大排序

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;数据结构 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客讲解八大排序&#xff0c;及其优化 文章目录排序Ⅰ插入排序&…

配置SSH Keys到github,实现本地操作远程仓库的权限

文章目录第1步&#xff1a;创建SSH Key第2步&#xff1a;检查是否纯正.ssh目录第3步&#xff1a;复制id_rsa.pub的内容第4步&#xff1a;在你的github页面上配置SSH key第5步&#xff1a;验证是否可连接第1步&#xff1a;创建SSH Key 在用户根目录下&#xff0c;打开命令&…

非零基础自学Golang 第10章 错误处理 10.5 Go语言错误的应用 10.6 小结 10.7 知识拓展

非零基础自学Golang 文章目录非零基础自学Golang第10章 错误处理10.5 Go语言错误的应用10.6 小结10.7 知识拓展10.7.1 error接口的应用第10章 错误处理 10.5 Go语言错误的应用 10.4.2小节中的panic()和recover()虽然能模拟其他语言的异常机制&#xff0c;但是并不建议在Go语言…

广州特耐苏-广州风淋通道构造及特点

风淋通道构造及风淋通道特点-广州特耐苏-广州风淋通道-广州风淋通道规格-广州风淋通道置量-广州风淋通道价格-特耐苏拥有*的数控加工设备&#xff0c;技术力量雄厚&#xff0c;专业生产自动化/风淋室货淋室、 >>采用更适合洁净室原理的圆弧转角; >>系统自动控制运…