六、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. 随机数Random和SecureRandom

    "Random" objects should be reused Bug Critical Main sources owasp-a6 Available SinceNov 16 ...

  2. [Oracle19C 数据库管理] 管理回滚表空间(UNDO Tablespace)

    当对数据进行修改时,Oracle数据库会将旧的数据存储到UNDO表空间(回滚表空间).回滚表空间让用户可以rollback到修改前的数据,提供了读一致性,并支持闪回查询过去的数据.Undo也用来在Tr ...

  3. xd p4 WEB源码拓展

    WEB 源码在安全测试中是非常重要的信息来源,可以用来代码审计漏洞也可以用来做信息突破口,其中 WEB 源码有很多技术需要简明分析. 知识点 关于 WEB 源码目录结构 后台目录.模板目录.数据库目录 ...

  4. 2.VS编写XML实例程序

    在VS中编写XML实例程序 1.如下,在 VS 中分别新建  XML 文件.XML 解析类.XML 实体类 2.在项目中代码,如下 (1)XML 文件(注:在 VS 解决方案资源管理器中选中 XML ...

  5. 2. Marker 标记(就是在地图上放上标记)

    1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...

  6. js 获取标签属性值

    有时候需要获取标签里属性里的值,可以采用以下方法: demo: <a href="/admin/article/${id}" onclick="return del ...

  7. 为什么JAVA中(byte)128结果为-128;(byte)-129结果为127

    为什么JAVA中(byte)128结果为-128;(byte)-129结果为127 在JAVA中默认的整型为int型,int型占4个字节,为32位.byte占一个字节为8位. JAVA中的二进制都是采 ...

  8. 有关插槽中scope的问题

    暂时不理解

  9. go 死锁示例

    以下代码不会有任何打印.原因是:channel ch 在make 时是无缓冲区的channel.无缓冲区的channel 发送一个数据进入后需要等待这个数据被消耗才能继续发送下一个数据.然而getFr ...

  10. setState 更新

    同步逻辑中,setState异步更新,同步更新会合并为一次更新 异步逻辑中,setState同步更新 this.setState({ data:data,()=>{ } }) 在回调函数里面了解 ...