您的位置:首页 > 编程语言 > Java开发

拥抱 lombok - 通过简单注解去掉臃肿的Java代码,提升代码可读性

2018-01-16 10:11 543 查看

拥抱 lombok - 通过简单注解去掉臃肿的Java代码,提升代码可读性

注意 : 使用lombok不要使用IDEA自动导入的Java的Getter和Setter的包,不然会报错。

1.去掉Getter 和 Setter的代码

// 注解
@Getter
@Setter
public class User{

privite Integer age;
privite String name;
}

// lombok会自动生成Getter 和 Setter方法
// 默认生成的是public的,并且Set方法是void的,
// @Getter(access = AccessLevel.PROTECTED) 可以设置权限


2.去掉toString代码

@ToString
public class User{

privite String name;
}

// 自动添加ToString方法。
// 格式:"User(name=" + name + ")";


3.去掉hashCode和equals代码

// 生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。
// 但可以通过在可选的exclude参数中来排除更多字段。或者,通过在parameter参数中命名它们来准确指定希望使用哪些字段。

@EqualsAndHashCode(exclude={"id", "shape"})
public class EqualsAndHashCodeExample {
private transient int transientVar = 10;
private String name;
private double score;
private Shape shape = new Square(5, 10);
private String[] tags;
private transient int id;

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

@EqualsAndHashCode(callSuper=true)
public static class Square extends Shape {
private final int width, height;

public Square(int width, int height) {
this.width = width;
this.height = height;
}
}
}


4.初始化检查

// @NoArgsConstructor生成一个无参构造方法。
// 当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null。
// 对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。

import lombok.NoArgsConstructor;
import lombok.NonNull;

@NoArgsConstructor(force = true)
public class User {
@NonNull private Integer id;
@NonNull private String name;
private final String phone ;
}


5.构造方法

// @RequiredArgsConstructor会生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段
// @RequiredArgsConstructor(staticName = "of")会生成一个of()的静态方法,并把构造方法设置为私有的

@RequiredArgsConstructor
public class User {
@NonNull private Integer id ;
@NonNull private String name = "foobar";
private final String phone;
}

// 生成全参数构造方法 @AllArgsConstructor
@AllArgsConstructor
public class User {
@NonNull private Integer id ;
@NonNull private String name = "foobar";
private final String phone;
}


6.聚合注解

@Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor

// 基本功能,没个都写,没意思,@Data一键搞定
@Data


7.lombok控制

// 该注解有三个属性
@Accessors

// 1.fluent boolean值,默认为false。
//    - 此字段主要为控制生成的getter和setter方法前面是否带get/set

// 2.chain boolean值,默认false。
//    - 如果设置为true,setter返回的是此对象,方便链式调用方法

// 3.prefix 设置前缀
//    - 例如:@Accessors(prefix = "abc") private String abcAge 当生成get/set方法时,会把此前缀去掉


8.函数构建器

@Builder
public class BuilderInLombok {

private Integer age;
private String name;
private boolean sex;

public static void main(String[] args) {
BuilderInLombok.builder()
.age(17)
.name("foobar")
.sex(true)
.build();
}
}


9.更新注解

@Synchronized
@Wither
@onX
@Delegate

etc.


Lombok官方 features - all
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: