小记----------lombok插件idea的安装&常见注解解释及小案例

Lombok安装插件
软件:idea 2018.3.6版本
1、打开settings
 
2.选择Plugins-----Marketplace--------输入Lombok(注意L是大写)----点击Install  然后重启idea即可
 
 
3.然后再进入settings 设置一下这个  (不知道 是什么意思, 但是不设置的话idea会提示去设置)
 
 
Lombok常见注解 解释及使用方法
@Data   :注解在类上;包含了@ToString,@EqualsAndHashCode,@Getter / @Setter和@RequiredArgsConstructor的功能,提供类所有属性的 getter 和 setter 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter:注解在属性上;为属性提供 setter 方法
@Getter:注解在属性上;为属性提供 getter 方法默认生成的方法是public的,如果要修改方法修饰符可以设置AccessLevel的值,例如:@Getter(access = AccessLevel.PROTECTED)
@Getter
@Setter(AccessLevel.PROTECTED)
public class User{
    private String id;
    private int age;
    private String name;
    private boolean sex;    
}

编译后代码为
public class User{
    private String id;
    private int age;
    private String name;
    private boolean sex;
 
    public User(){
    }
 
    public String getId(){ return this.id ; }
    
    public int getAge(){ return this.age; }
 
    public String getName() {return this.name; }
 
    public boolean isSex(){ return this.sex;}    
 
    protected void setId(String id) { this.id = id; }
}

 
 
 
@ToString:注解在类上;生成toString()方法,默认情况下,它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段@ToString(exclude = "id") / @ToString(exclude = {"id","name"});如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)
@ToString(exclude = {"id" , "age"})
public class User{
    private String id;
    private int age;
    private String name;
}
 
编译后代码
@Override
public String toString(){
    return "User{" + 
            "name='" + name + '\''+
            '}';
}

 



@EqualsAndHashCode:注解在类上;生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在parameter参数中命名它们来准确指定希望使用哪些字段。
 
@NonNull:  注解在属性上;标识属性是不能为空,为空则抛出异常。
 
@Slf4j :注解在类上;根据用户实际使用的日志框架生成log日志对象。
 
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
 
@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true)然后就会为没有初始化的final字段设置默认值 0 / false / null。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。
@NoArgsConstructor(force = true)
public class User{
    @NonNull private String id;
    private int age;
    private String name;
}
 
编译后代码
public class User{
    @NonNull
    private String id;
    private int age;
    private String name;
 
    public User(){
    }
}

 

 
@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
@AllArgsConstructor
public class User {
    @NonNull private String id;
    @NonNull private int age;
    private String name;
}
 
 
编译后代码为
public class User{
    @NonNull
    private String id;
    @NonNull
    private int age;
    private String name;

    public User(@NonNull String id, @NonNull int age , String name)
        if(id == null){
            throw  new NullPointerException("id is marked @NonNull but is null");
        }else {
            this.id = is ;
            this.age =age ;
            this.name = name;
        }
}

 

@RequiredArgsConstructor:注解在类上;会生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段@RequiredArgsConstructor(staticName = "of")会生成一个of()的静态方法,并把构造方法设置为私有的。
@RequiredArgsConstructor(staticName = "of")
public class User{
    @NonNull private String id;
    @NonNull private int age;
    private String name;
}
 
编译后代码
public class User{
    @NonNull
    private String id;
    @NonNull
  private int age;
  private String name;
 
    private User(@NonNull String id , @NonNull int age){
        if(id == null){
            throw new NullPointerException("id is maked @NonNull but is null")
        }else{
            this.id = id;
            this.age = age;
        }
    }
 
    public static User of(@NonNull String id, @NonNull int age){
        return new User(id , age);
    }
}

 

@builder:注解在类上;构建者模式 若一个类具有大量的成员变量,我们就需要提供一个全参的构造器或大量的set方法。这让实例的创建和赋值,变得很麻烦,且不直观。我们通过构建器,可以让变量的赋值变成链式调用,而且调用的方法名对应着成员变量的名称。让对象的创建和赋值都变得很简洁、直观。
// 创建名为Officer的java bean@Builderpublic class Officer {
    private final String id;
    private final String name;
    private final int age;
    private final String department;}
 
 
// 调用构建器生成Officer实例class BuilderTest {
    public static void main(String[] args) {
        Officer officer = Officer.builder().id("00001").name("simon qi")
                .age(26).department("departmentA").build();
    }}
 

 

@Value:注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。 注意:没有setter 方法

 

@Synchronized: 该注解使用在类或者实例方法上,Synchronized在一个方法上,使用关键字可能会导致结果和想要的结果不同,因为多线程情况下会出现异常情况。Synchronized 关键字将在this示例方法情况下锁定当前对象,或者class讲台方法的对象上多锁定。这可能会导致死锁现象。一般情况下建议锁定一个专门用于此目的的独立锁,而不是允许公共对象进行锁定。该注解也是为了达到该目的。 

// 注解方法@Synchronized
  public int answerToLife() {
    return 42;
  }
//等同于加锁public int answerToLife() {
    synchronized($lock) {
      return 42;
    }
  }

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2019-10-16 14:37  二黑诶  阅读(216)  评论(0)    收藏  举报