六、Lombok 注解详解(4)

8,@Data

(1)@Data 是一个复合注解,用在类上,使用后会生成:默认的无参构造函数、所有属性的 getter、所有非 final 属性的 setter 方法,并重写 toString、equals、hashcode 方法。
1 package com.example.demo;
2
3 import lombok.Data;
4
5 @Data
6 public class User {
7 private String name;
8 private Integer age;
9 }

(2)上面的 @Data 等效于如下几个注解结合使用:

 1 package com.example.demo;
2
3 import lombok.*;
4
5 @Setter
6 @Getter
7 @ToString
8 @EqualsAndHashCode
9 @NoArgsConstructor
10 public class User {
11 private String name;
12 private Integer age;
13 }

9,@Value

@Value 注解和 @Data 类似,区别在于它会把所有成员变量默认定义为 private final 修饰,并且不会生成 set() 方法。
 1 // 使用注解
2 @Value
3 public class ValueExample {
4 String name;
5 @Wither(AccessLevel.PACKAGE) @NonFinal int age;
6 double score;
7 protected String[] tags;
8 }
9
10 // 不使用注解
11 public final class ValueExample {
12 private final String name;
13 private int age;
14 private final double score;
15 protected final String[] tags;
16
17 public ValueExample(String name, int age, double score, String[] tags) {
18 this.name = name;
19 this.age = age;
20 this.score = score;
21 this.tags = tags;
22 }
23
24 //下面省略了其它方法
25 //.....
26 }

10,@NonNull

(1)注解在属性上,标识属性是不能为空,为空则抛出异常。换句话说就是进行空值检查。
 1 package com.example.demo;
2
3 import lombok.NonNull;
4
5 public class NonNullExample {
6 private String name;
7
8 public NonNullExample(@NonNull User user) {
9 this.name = user.getName();
10 }
11 }

(2)上面相当与如下 Java 代码:

 1 package com.example.demo;
2
3 public class NonNullExample {
4 private String name;
5
6 public NonNullExample(User user) {
7 if (user == null) {
8 throw new NullPointerException("user");
9 }
10 this.name = user.getName();
11 }
12 }

(3)下面是一个简单的测试样例:

1 User user = null;
2 try {
3 NonNullExample example = new NonNullExample(user);
4 }catch (NullPointerException ex) {
5 return ex.toString();
6 }

11,@Cleanup

(1)用于关闭并释放资源,可以用在 IO 流上;
 1 public class CleanupExample {
2 public static void main(String[] args) throws IOException {
3 @Cleanup InputStream in = new FileInputStream(args[0]);
4 @Cleanup OutputStream out = new FileOutputStream(args[1]);
5 byte[] b = new byte[10000];
6 while (true) {
7 int r = in.read(b);
8 if (r == -1) break;
9 out.write(b, 0, r);
10 }
11 }
12 }

(2)上面相当与如下传统的 Java 代码:

 1 public class CleanupExample {
2 public static void main(String[] args) throws IOException {
3 InputStream in = new FileInputStream(args[0]);
4 try {
5 OutputStream out = new FileOutputStream(args[1]);
6 try {
7 byte[] b = new byte[10000];
8 while (true) {
9 int r = in.read(b);
10 if (r == -1) break;
11 out.write(b, 0, r);
12 }
13 } finally {
14 if (out != null) {
15 out.close();
16 }
17 }
18 } finally {
19 if (in != null) {
20 in.close();
21 }
22 }
23 }
24 }

SpringBoot - Lombok使用详解4(@Data、@Value、@NonNull、@Cleanup)的更多相关文章

  1. Lombok使用详解(转)

    本文转自https://blog.csdn.net/u010695794/article/details/70441432 2017年04月22日 15:17:00 阅读数:10394 Lombok使 ...

  2. Lombok 使用详解,简化Java编程

    前言 在 Java 应用程序中存在许多重复相似的.生成之后几乎不对其做更改的代码,但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求 比如,在 Java 应用程序开发中,我们几乎要为所有 ...

  3. Springboot mini - Solon详解(二)- Solon的核心

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  4. Springboot mini - Solon详解(六)- Solon的校验框架使用、定制与扩展

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  5. Springboot mini - Solon详解(八)- Solon的缓存框架使用和定制

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  6. SpringBoot之DispatcherServlet详解及源码解析

    在使用SpringBoot之后,我们表面上已经无法直接看到DispatcherServlet的使用了.本篇文章,带大家从最初DispatcherServlet的使用开始到SpringBoot源码中Di ...

  7. SpringBoot Profile使用详解及配置源码解析

    在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...

  8. Spring全家桶——SpringBoot之AOP详解

    Spring全家桶--SpringBoot之AOP详解 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方 ...

  9. Springboot mini - Solon详解(四)- Solon的事务传播机制

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  10. Springboot mini - Solon详解(三)- Solon的web开发

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

随机推荐

  1. SqlServer 优化的技巧

    1.避免使用 select * select * 不会走覆盖索引,会出现大量的回表操作,从而导致SQL的查询性能很低 2.用union all 代替 union 1.使用union后,可以获取排重复后 ...

  2. BIP查询框添加查询条件

    // 搜索框添加查询条件 viewModel.on("afterMount", function (data) { let agentId = viewModel.getParam ...

  3. ubuntu22.04LTS下编译glfw

    环境准备 # 预装cmake sudo apt install cmake # 下载源码 git clone https://github.com/glfw/glfw.git 编译 # cmake初始 ...

  4. Centos7 安装Seata,注册中心选择nocas

    前言 1.什么是分布式事务,分布式事务包含哪些角色 分布式事务主要包含,事务参与者,事务管理者,资源服务器三个角色.分布式事务是指着三个角色分别位于不同的分布式系统的不同节点之上.简单的说,就是一次大 ...

  5. 深入Alertmanager 概念与配置介绍

    原文: https://www.cnblogs.com/gered/p/13496950.html 警报一直是整个监控系统中的重要组成部分,Prometheus监控系统中,采集与警报是分离的.警报规则 ...

  6. 查询dockerhub中某镜像所有版本

    curl https://registry.hub.docker.com/v1/repositories/${imagename}/tags | tr -d '[[]" ]' | tr '} ...

  7. 【10】python之条件判断

    Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块. Python中没有switch – case语句,也没有三元运算符. 1.if 语句 Pytho ...

  8. [NepCTF2022]中学数学

    中学数学 p.q挣扎很久没分解出来,wp出来了赶紧复现试试. 题目 from gmpy2 import * from Crypto.Util.number import * from secret i ...

  9. 访问远程服务-RPC 与 REST

    方法调用 所做的传递参数.传回结果都依赖于栈内存.所以Caller 调用者 Callee 被调用者应该同属一个进程,拥有相同的 栈内存, 进程间通信(Inter-Process Communicati ...

  10. c++内存分配函数

    c语言中: 动态分配内存: malloc()函数; 释放内存: free()函数; c++中: 上述函数仍然可以使用; 动态分配内存: new关键字; 释放内存: delete关键字; int *p ...