小记----------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; } }
作者:于二黑
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号