Lombok-全面详解(学习总结---从入门到深化)
  TEZNKK3IfmPf 2024年04月12日 45 0

Lombok概述

以前的Java项目中,充斥着太多不友好的代码:POJO的 getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等 等,这些代码既没有技术含量,又影响着代码的美观,Lombok应 运而生。

LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中 的冗长代码。

1、使用LomBok之前

Lombok-全面详解(学习总结---从入门到深化)

 2、使用LomBok之后

Lombok-全面详解(学习总结---从入门到深化)

Lombok插件安装 

如果IDEA版本在2020.3以上,不需要安装Lombok插件。如果IDEA 版本在2020.3以下,需要安装Lombok插件,安装方法如下:

1、点击Flie->Setting->Plugins

2、搜索Lombok,安装

Lombok-全面详解(学习总结---从入门到深化)

 Lombok依赖

1、普通maven项目Lombok依赖为:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>

2、SpringBoot项目Lombok的引入方式为:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

 Lombok注解_@Setter、@Getter

Lombok-全面详解(学习总结---从入门到深化)

 作用:为类中的属性提供setter/getter方法

 位置:类上方或属性上方,在属性上方则为属性生成setter/getter 方法,在类上方表示给该类下的所有属性生成setter/getter方法

属性:设置setter和getter访问权限

//给类下的所有属性添加Setter/Getter
@Setter
@Getter
public class User {
    //给id属性添加Setter
    @Setter
    private Integer id;
    //给username的setter方法设置私有权限
    @Setter(AccessLevel.PRIVATE)
    private String username;
    //取消password的Getter方法
    @Getter(AccessLevel.NONE)
    private String password;
    private static int age;
    private final String address = null;
}

注: 1、static修饰的变量不生成getter和setter方法

         2、final修饰的变量只生成getter方法

在IDEA中,按住 Alt+7 可以查看Lombok生成的代码

 Lombok注解_@ToString

Lombok-全面详解(学习总结---从入门到深化)

 作用:生成toString方法,默认情况下它会按顺序打印类名称以及 每个字段。

 位置:类上方

 属性:

1、exclude:取消某一个或多个变量在toString方法中的显示

@Setter
@Getter
//给User2设置一个toString方法,该方法不会显示password的值
@ToString(exclude = {"password"})
public class User2 {
    private Integer id;
    private String username;
    private String password;
}

 Lombok注解_@EqualsAndHashCode

Lombok-全面详解(学习总结---从入门到深化)

 判断两个对象是否相等

在Java中,调用equals()可以判断两个对象是否相等。如果类不重写 该方法,则判断两个引用是否指向同一个对象。

如何重写equals():

1、判断两个引用是否指向同一对象

2、判断引用是否为Null

3、判断两个对象的实际类型是否相等,此时需要调用canEqual()

4、判断两个对象的属性是否相等

而在Set中判断对象是否重复,在调用equals()之前,需要先调用 hashCode()计算hash值。所以判断对象相等需要重写equals()、 canEqual()、hashCode()三个方法。

 @EqualsAndHashCode

作用:生成equals和hashCode、canEqual方法。用于比较两个类 对象是否相同。

位置:类上方

属性:

1、exclude: 比较时排除一些属性
2、of: 比较时只使用一些属性
@Setter
@Getter
@ToString
//@EqualsAndHashCode(exclude = {"password"})
//排除password,只使用id,username对比及计算hash
@EqualsAndHashCode(of = {"username"})
//只使用username对比及计算hash
public class User3 {
    private Integer id;
    private String username;
    private String password;
}

注意:

1、对比时只使用非静态属性

2、默认仅使用该类定义的属性不比较父类定义的属性

Lombok注解_@NonNull 

Lombok-全面详解(学习总结---从入门到深化)

 作用:用于方法参数前,表示调用该方法时参数不能为null;用于 属性上方,表示为该属性赋值时值不能为null。

位置:方法参数前或属性上方。

@Setter
@Getter
public class User4 {
    // 调用构造方法或setter给id赋值时,值不能为null
    @NonNull
    private Integer id;
    private String username;
    private String password;
    // 调用sleep方法时,time参数不能为null
    public void sleep(@NonNull Integer time)
   {
        System.out.println("睡觉");
   }
}
// 测试
@SpringBootTest
public class UserTest {
    @Test
    public void testUser() {
        User4 user = new User4();
        user.setId(null);
        user.sleep(null);
   }
}

 Lombok注解_@NoArgsConstructor

Lombok-全面详解(学习总结---从入门到深化)

 作用:生成无参构造方法

 位置:类上方

Lombok注解_@RequiredArgsConstructor 

作用:生成包含final和@NonNull修饰的属性的构造方法

位置:类上方

 Lombok注解_@AllArgsConstructor

作用:生成全参的构造方法

位置:类上方

@Setter
@Getter
//@NoArgsConstructor // 给类提供无参构造方法
@RequiredArgsConstructor // 生成两个username和sex参数的构造方法
@AllArgsConstructor//提供全参构造方法
public class User5 {
    @NonNull
    private Integer id;
    private String username;
    private String password;
    private final String sex;
}

Lombok注解_@Data 

Lombok-全面详解(学习总结---从入门到深化)

作用:相当于同时添加@Setter、@Getter、@ToString、 @EqualsAndHashCode、 @RequiredArgsConstructor五个注解

位置:类上方 

Lombok注解_@Builder 

作用:提供链式风格创建对象

位置:类上方

// 同时提供@Setter、@Getter、@ToString、
@EqualsAndHashCode、@RequiredArgsConstructor
@Data
// 提供链式风格创建对象
@Builder
public class User6 {
    @NonNull
    private Integer id;
    private String username;
    private String password;
}
// 测试
@Test
public void testUser() {
    User6 user6 = User6.builder()
       .id(1)
       .username("itbaizhan")
       .password("itbaizhan")
       .build();
}

Lombok注解_@Log

Lombok-全面详解(学习总结---从入门到深化)

 作用:在类中生成日志对象,在方法中可以直接使用

 位置:类上方

@Data
@Log4j2
public class User7 {
    private Integer id;
    private String username;
    private String password;
    public void sleep(){
        ("调用睡觉方法");
        System.out.println("睡觉");
   }
}

注:针对不同的日志实现产品,有不同的日志注解,使用 @Log 表示使用Java自带的日志功能,除了 @Log ,还可以使用 @Log4j 、 @Log4j2 、 @Slf4j 等注解,来使用不同的日志产品。

Lombok注解_@Cleanup 

Lombok-全面详解(学习总结---从入门到深化)

作用:自动关闭资源,如IO流对象。

位置:代码前方

Lombok注解_@SneakyThrows 

Lombok-全面详解(学习总结---从入门到深化)

作用:对方法中异常进行捕捉并抛出

位置:方法上方

@SneakyThrows
public void read() {
    @Cleanup FileInputStream fis = new FileInputStream("");
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年04月12日 0

暂无评论

推荐阅读
TEZNKK3IfmPf