• Java基础002 --- Lombok的使用


    简介

    Lombok是一个java库,通过使用简单的注解,简化java代码开发,并且在编译生成的字节码文件中生成对应的方法;主要的应用场景:java bean的代码开发。

    在以往的开发中,我们需要在java bean中为每个属性添加getter&setter方法,并且需要重写toString和equals方法;有多个java bean,我们需要添加很多重复化代码,

    并且,如果我们需要添加或者修改某个属性,我们需要排查对应的getter、setter、toString和equals方法,这样不仅排查难度大,并且容易出错;使用lombok可以解决该问题。

    构建方法

    应用程序使用maven构建

    Lombok注解的使用

    @Getter

    该注解可以用来注释类和类属性,属性上的注解会覆盖类上的注解;@Getter注解为所有的非静态方法生成getter方法;默认生成的getter方法是public的,可以通过AccessLevel指定访问权限;

    @Getter注解还提供了一个高级特性,可以指定延迟加载,并且由lombok保证线程安全

     源码:

    @Getter(value = AccessLevel.PROTECTED)
    public class Student {
    
        @Getter(value = AccessLevel.PRIVATE)
        private Integer id;
    
        @Getter(lazy = true)
        private final String name = "AA";
    
        private Integer age;
        
        private static String points;
    }
    

    生成的字节码文件:

    @Setter

    该注解可以用来注释类和属性,注释类的时候,会为非static非final属性生成setter方法,并且属性上的注解会覆盖类上的注解;

    同样,可以使用AccessLevel指定访问权限。

    源码:

    @Setter(value = AccessLevel.PROTECTED)
    public class Student1 {
    
        @Setter
        private Integer id;
    
        private final String name = "AA";
    
        private Integer age;
    
        private static String points;
    }    

    生成的字节码文件:

    @ToString

    只能用来注释类,默认情况下使用非静态属性,有以下几种用法

    incloudFieldNames 返回字符串中是否包含属性名称,默认true
    exclude   排除的属性
    of   包含的属性  
    callSuper   返回字符串中调用父类的toString方法,默认false
    doNotUseGetters 是否调用getter方法获取属性值,默认true
    onlyExplicitlyIncluded 只显示被@ToString.Include注解注释的属性

    @EqualsAndHashCode

    只能用来注释类,默认情况下使用非静态属性和非transient修饰的属性,用法同ToString注解的表格

    @NoArgsConstructor

    生成无参构造器,有下面几个用法

    staticName 生成一个方法名为staticName指定的静态方法,该方法返回一个该类的实例
    force 为所有未初始化的final属性强制添加初始化值
    access 指定构造器访问权限

    示例:

    @NoArgsConstructor(staticName = "instance")
    public class Student4 {
    
        private Integer id;
    
        private final String name = "AA";
    
        private Integer age;
    
        private static String points;
    }
    

    生成字节码文件:

    @AllArgsConstructor

    生成全参数构造器,可以指定staticName和access,用法和无参构造器表格一致

    @RequiredArgsConstructor

    生成构造器,可能有参数或者无参数;有参数,参数只能为final或者@NonNull注解修饰的未初始化的属性

    示例:

    @RequiredArgsConstructor
    public class Student5 {

    @NonNull
    private Integer id;

    private final String name = "AA";

    private final Integer age;

    private String sports;

    private static String points;
    }

    生成的字节码文件:

     @Data

    一个集合注解,包含了@Getter,@Setter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor注解的功能

     @NonNull

    指定元素取值不能为空,为空则抛空指针异常;可以用来修饰属性、方法、入参、临时变量

    @Accessors

    用于对生成的getter和setter方法进行配置,可以进行如下设置

    fluent 默认false,为true时,生成的getter和setter方法不带get和set前缀;如果未指定chain属性,则此时,chain属性为true
    chain 默认false,为true时,生成的setter方法返回值为该类对象,不为void
    prefix 指定生成的setter和getter方法满足小驼峰式命名

     

    源码:

    public class Student6 {
    
        @Getter
        @Setter
        @Accessors(fluent = true)
        private Integer id;
    
        @Getter
        @Setter
        @Accessors(chain = true)
        private String name;
    
        @Getter
        @Accessors(prefix = "a")
        private String aSports;
    
        private static String points;
    }

    生成的字节码文件:

    @Builder

    生成java建造者模式代码

    @Cleanup

    用于在代码推出当前作用域前,释放资源,主要用法如下:

    1、释放固有资源(如IO输入输出、数据库连接)

    源码:

    public class TestCleanUp {
    
        public void test01() throws IOException {
            @Cleanup
            FileInputStream fileInputStream = new FileInputStream("aa.txt");
    
            byte [] bytes = new byte[1024];
    
            int len = fileInputStream.read(bytes);
        }
    }

    生产字节码文件:

    2、非固有资源,需要制定一个无参的释放资源方法

    源码:

    public class Student8 {
    
        private Integer id;
    
        private String name;
    
        private String aSports;
    
        public void testClose() {
            System.out.println("testClose.");
        }
    }
    
    
    public void test02() {
        @Cleanup("testClose")
        Student8 student8 = new Student8();
    }

    生成字节码文件:

  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/sniffs/p/11566930.html
Copyright © 2020-2023  润新知