• lombok入门


    目录

    lombok概述

    lombok安装

    @Getter、@Setter

    @ToString

    @EqualsAndHashCode

    @NotNull

    生成构造方法相关注解

    @Data、@Builder

    @Log

    @Cleanup、@SneakyThrows


    lombok概述

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

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

    • 使用LomBok之前

    • 使用LomBok之后

     

     

     

    lombok安装

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

    1. 点击Flie->Setting->Plugins
    2. 搜索Lombok,安装

     

    Lombok依赖

    • 普通maven项目Lombok依赖为:
      1. <dependency>
      2.   <groupId>org.projectlombokgroupId>
      3.   <artifactId>lombokartifactId>
      4.   <version>1.18.22version>
      5.   <scope>providedscope>
      6. dependency>
    • SpringBoot项目Lombok的引入方式为:
      1. <dependency>
      2.   <groupId>org.projectlombokgroupId>
      3.   <artifactId>lombokartifactId>
      4.   <optional>trueoptional>
      5. dependency>

     

    @Getter、@Setter

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

    位置:类上方或属性上方,在属性上方则为属性生成setter/getter方法,

        在类上方表示给该类下的所有属性生成setter/getter方法

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

    1. //给类下的所有属性添加Setter/Getter
    2. @Setter
    3. @Getter
    4. public class User{
    5. //给id属性添加Setter
    6. @Setter
    7. private Integer id;
    8. //给username的setter方法设置私有权限
    9. @Setter(AccessLevel.PRIVATE)
    10. private String username;
    11. //取消password的Getter方法
    12. @Getter(AccessLevel.NONE)
    13. private String password;
    14. private static int age;
    15. private final String address=null;
    16. }

     

     

    注:

    • static修饰的变量不生成getter和setter方法
    • final修饰的变量只生成getter方法

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

     

    @ToString

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

    位置:类上方

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

     

     编写pojo类

    1. @Getter
    2. @Setter
    3. @ToString
    4. public class User1 {
    5. private Integer id;
    6. private String name;
    7. private String password;
    8. }

    编写测试类

    1. public class Test1 {
    2. public static void main(String[] args) {
    3. User1 user1 = new User1();
    4. user1.setId(1);
    5. user1.setName("zhangsan");
    6. user1.setPassword("123456");
    7. System.out.println(user1);
    8. }
    9. }

    运行测试类 

     

    @EqualsAndHashCode

    判断两个对象是否相等

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

    如何重写equals():

    1. 判断两个引用是否指向同一对象
    2. 判断引用是否为Null
    3. 判断两个对象的实际类型是否相等,此时需要调用canEqual()
    4. 判断两个对象的属性是否相等

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

     

    @EqualsAndHashCode

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

    位置:类上方

    属性:

    • exclude: 比较时排除一些属性
    • of: 比较时只使用一些属性

     

    编写pojo类 

    1. @Getter
    2. @Setter
    3. @EqualsAndHashCode
    4. public class User2 {
    5. private Integer id;
    6. private String name;
    7. private String password;
    8. }

    编写测试类 

    1. public class Test2 {
    2. public static void main(String[] args) {
    3. User2 user1 = new User2();
    4. user1.setId(1);
    5. user1.setName("zhangsan");
    6. user1.setPassword("123456");
    7. User2 user2 = new User2();
    8. user2.setId(1);
    9. user2.setName("zhangsan");
    10. user2.setPassword("123456");
    11. System.out.println(user1.equals(user2));
    12. }
    13. }

    运行测试类 

     

    @NotNull

    作用:用于方法参数前,表示调用该方法时参数不能为null

               用于属性上方,表示为该属性赋值时值不能为null。

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

     

    生成构造方法相关注解

    @NoArgsConstructor

    作用:生成无参构造方法

    位置:类上方

     

    @RequiredArgsConstructor

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

    位置:类上方

     

    @AllArgsConstructor

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

    位置:类上方

    @Data、@Builder

    @Data

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

    位置:类上方

     

    @Builder

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

    位置:类上方

     

    编写pojo类

    1. @Data
    2. @Builder
    3. public class User3 {
    4. private Integer id;
    5. private String name;
    6. private String password;
    7. }

    编写测试类

    1. public class Test3 {
    2. public static void main(String[] args) {
    3. User3 user3 = User3.builder().id(1).name("zhangsan").password("987654").build();
    4. System.out.println(user3);
    5. }
    6. }

    启动测试类 

     

    @Log

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

    位置:类上方

     

    1. @Data
    2. @Log4j2
    3. public class User7{
    4.   private Integeri d;
    5.   private String username;
    6.   private String password;
    7.   public void sleep(){
    8.     log.info("调用睡觉方法");
    9.     System.out.println("睡觉");
    10.    }
    11. }

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

    @Log @Log @Log4j @Log4j2 @Slf4j

     

    @Cleanup、@SneakyThrows

    @Cleanup

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

    位置:代码前方

     

    @SneakyThrows

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

    位置:方法上方

     

    1. public class Test4 {
    2. @SneakyThrows
    3. public static void main(String[] args) {
    4. @Cleanup FileInputStream fis = new FileInputStream("");
    5. }
    6. }

     

  • 相关阅读:
    虚拟机安装-ubuntu
    手撸时间轮
    STL教程5-STL基本概念及String和vector使用
    linux查看服务器开放的端口和启用的端口五种方式
    【电源专题】为什么旁路/去耦电容这么重要?在PCB Layout时应该注意什么?
    毕业论文中的问卷如何做效度分析?
    Matlab:Matlab编程语言学习之变量&常量/数据类型的简介、技巧总结案例应用之详细攻略
    CMake中message的使用
    1024,向着“顶尖程序员“迈进
    weblogic/CVE-2018-2894文件上传漏洞复现
  • 原文地址:https://blog.csdn.net/cccccccmmm/article/details/128166178