六、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. 【python基础教程】-10.开箱即用(模块的工作原理,获悉模块的功能以及常用模块)

    资料来源 (1) Python基础教程第三版 1.模块的工作原理 1.1 简单的模块及使用 1.1.1 模块的本质 (1) 模块就是程序,任何python程序都可以作为模块导入; 1.1.2 简单的模 ...

  2. 修改 Ubuntu 的软件源

    1.将 /etc/apt/ 路径下的 sources.list 的内容修改为如下内容(此内容为 Ubuntu Kylin 里面的内容,直接拿过来用,也可以用其它的国内的源). deb http://m ...

  3. js 自定义可编辑table并获取输入值

    1.js加载table,tabid为abc. jsp: <table id="abc"></table> js:var tr_tr = "&quo ...

  4. 华为交换机,改vlan的方法

    telnet 登录1.1.1.111, 如果登录再到其他交换机,需要在用户状态,telnet其他的ip.不能在系统用户状态下跳转登录. sys改为系统用户  状态符由尖括号,改为方括号 display ...

  5. SICP 笔记:环境配置

    SICP 笔记:环境配置 记录学习<算机的程序的构造和解释>的笔记. 环境配置 SICP 里面使用的语言是一种 Lisp 的变体 Scheme. 使用 DrRacket 作为 IDE 来进 ...

  6. https原理(三)双向实践(curl)

    接 https代理服务器(三)实践,实践双向ssl 本文采用客户端与服务端不同密钥对 1 mkcert myclient 生成客户端公钥 私钥 2 mkcert -pkcs12 myclient 也可 ...

  7. BeanUtils.copyProperties null覆盖问题

    直接用一下工具类 public class CopyUtils { public static String[] getNullPropertyNames (Object source) { fina ...

  8. 【转】BIO,NIO和AIO

    本文转自:https://blog.csdn.net/qxy_1218/article/details/123941039 BIO,NIO和AIO是Java网络编程的三种模型 BIO:同步并阻塞,服务 ...

  9. Day21 21.2:CrawlSpider-redis分布式爬虫

    CrawlSpider-redis分布式 分布式在日常开发中并不常用,只是一个噱头! 概念: 可以使用多台电脑搭建一个分布式机群,使得多台对电脑可以对同一个网站的数据进行联合且分布的数据爬取. 声明: ...

  10. laravel 软删除的使用

    1.模型层 引用类use Illuminate\Database\Eloquent\SoftDeletes;class类中引用软删除use SoftDeletes;然后执行正常的删除,列表已经不显示, ...