lombok常用注解

 原文:https://blog.csdn.net/weixin_41540822/article/details/86606535

常用注解示例:Lombok常用注解 - 草木物语 - 博客园

1、maven依赖


    org.projectlombok
    lombok
    1.18.12

2、lombok常用注解

lombok常用注解_第1张图片

2.1、@Getter/@Setter

使用范围:上、类中字段上,让lombok自动生成默认的getter/setter

包装类型的Boolean 字段 flag, 生成的getter方法仍然是getFlag()

基本数据类型boolean 字段 updateFlag生成的getter方法为:isUpdateFlag()

作用在类上: 

package com.example.entity;                                                            
                                              
import lombok.Getter;                         
import lombok.Setter;                         
                                              
@Getter                                       
@Setter                                       
public class Consumer {                      
                                              
    private String name;                      
    private int age;                          
    private Boolean flag;                     
    private boolean updateFlag;               
                                              
}       

// 编译后
public class Consumer {

    private String name;
    private int age;
    private Boolean flag;
    private boolean updateFlag;

    public Consumer() { }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }

    public void setAge(int age) { this.age = age; }

    public Boolean getFlag() { return flag; }

    public void setFlag(Boolean flag) { this.flag = flag; }

    public boolean isUpdateFlag() { return updateFlag; }

    public void setUpdateFlag(boolean updateFlag) { this.updateFlag = updateFlag; }
}
                                    

2.1.1、 AccessLevel精确定义访问权限

        lombok生成的getter / setter方法默认是 public的。在Java中合法访问级别为PUBLIC,PROTECTED,PACKAGE和PRIVATE,AccessLevel是有一个枚举类型,主要定义访问权限,如下所示:

public enum AccessLevel {
    PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE,
    /** Represents not generating anything or the complete lack of a method. */
    NONE;
}

使用AccessLevel定义方法的访问权限,可以有两种方式:

1、在类上的@Getter 、@Setter中添加value = AccessLevel.PRIVATE,那么则会应用到类中的所有属性上;
2、在类中属性上的@Getter、 @Setter中添加value = AccessLevel.PRIVATE,那么会覆盖在类上添加的权限控制。

        在类AccessLevel中会看到AccessLevel.NONE,可以使用AccessLevel.NONE来定义字段的访问级别,意思是采用手动方式禁止此字段的getter / setter生成。 这个操作可以覆盖类上的@Getter@Setter@Data注释的行为。

示例: 

@Getter                                                                                     
@Setter(value = AccessLevel.PRIVATE)                                                        
public class Consumer2 {                                                                    
    @Setter(value = AccessLevel.PUBLIC)	// 测试在属性上定义会覆盖在类上的定义                                
    private String name;                                                                    
    @Getter(value = AccessLevel.PRIVATE)                                                    
    private int age;                                                                        
    private Boolean flag;                                                                   
    private boolean updateFlag;                                                             
                                                                                            
}                                                                                           
                                                                                            
// 编译后
public class Consumer {
    private String name;
    private int age;
    private Boolean flag;
    private boolean updateFlag;

    public Consumer2() {
    }

    public String getName() {
        return this.name;
    }

    public Boolean getFlag() {
        return this.flag;
    }

    public boolean isUpdateFlag() {
        return this.updateFlag;
    }

    private void setAge(final int age) {
        this.age = age;
    }

    private void setFlag(final Boolean flag) {
        this.flag = flag;
    }

    private void setUpdateFlag(final boolean updateFlag) {
        this.updateFlag = updateFlag;
    }

    public void setName(final String name) {
        this.name = name;
    }

    private int getAge() {
        return this.age;
    }
}

2.1.2、配置文件定制Lombok

注:使用lombok.config时,lombok需要lombok 1.14+

        我们可以使用配置文件lombok.config来定制Lombok,通过配置我们可以使用Lombok的功能,比如链式调用。可以将lombok.config的配置文件放到任意位置,lombok.config的作用范围是所在当前位置目录及子目录。出于规范,建议放在根目录或者src目录下

        如果在当前目录的子目录中还存在一个lombok.config配置文件,那么对于子目录中的的实体类会优先选择使用子目录中的配置,而当前目录(父目录)下的相同的的配置项会被子目录下的配置覆盖掉。

配置文件:

# 禁止生成以 set/get/is 为前缀的方法,以字段名为方法名。
lombok.accessors.fluent = [true | false] (default: false)
# 在生成的get/set/is 方法名中,添加前缀(或去掉字段中的某些前缀),eg:getPerfixFoo(),
lombok.accessors.prefix += a field prefix (default: empty list)
# 禁止生成 is 为前缀的方法
lombok.getter.noIsPrefix = [true | false] (default: false)
# 禁止使用 @Setter
lombok.setter.flagUsage = [warning | error] (default: not set)
# 禁止使用 @Getter
lombok.getter.flagUsage = [warning | error] (default: not set)
# 复制可以使用的注解:e.g. @Nullable/@NonNull annotations
lombok.copyableAnnotations = [A list of fully qualified types] (default: empty list)

2.2、@Data、@Value

@Data注解在类上,将类提供的所有属性都添加get、set方法,并添加equals、canEquals、hashCode、toString方法

@Value注解用于修饰类,相当于是@Data的不可变形式,因为字段都被修饰为private和final,默认的情况下不会生成settter。还有一点更狠的,默认类本身也是final的,不能被继承。

详细说明: https://blog.csdn.net/weixin_41540822/article/details/86606535

2.3、@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor

@NoArgsConstructor在类上使用,它可以提供一个无参构造器。

@AllArgsConstructor同样是在类上使用,该注解提供一个全参数的构造方法,默认不提供无参构造。需要注意的是,这里的全参不包括已初始化的final字段(主要是final字段,一旦被赋值不允许再被修改)。

@RequiredArgsConstructor也是在类上使用,但是这个注解可以生成带参的构造方法。只能是类中所有带有 @NonNull注解的和以final修饰的未经初始化的字段

详细说明 : https://blog.csdn.net/weixin_41540822/article/details/86606513 

2.4、@ToStirng

      添加一个toString方法


2.5、@NotNull

     不能为空,否则抛出空指针异常

你可能感兴趣的:(Java基础,java)