简介
lombok是java开发中一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,所以特此来推荐一下。
lombok的官方地址:https://projectlombok.org/
lombok的Github地址:https://github.com/rzwitserloot/lombok
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。
虽然有人可能会说IDE里面都自带自动生成这些方法的功能,但是每次修改属性字段的时候都需要重新生成一遍get/set方法,而且使用lombok会使你的代码看起来更加简洁,写起来也更加方便。
IntelliJ IDEA 使用它的方法
需要注意的是,使用lombok虽然在编译运行的时候不会报错,但是在IDE中会因为IDE找不到对应方法而飘红报错,所以需要下载对应的插件,以IDEA为例:File–> Settings–>Plugins
安装好lombok插件
然后添加lombok依赖,maven为:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
注解介绍
@Getter and @Setter
@Getter / @Setter注释的字段,lombok会自动生成默认的getter / setter方法。
默认生成的方法是public的,如果要修改方法修饰符可以设置AccessLevel的值,例如:@Getter(access = AccessLevel.PROTECTED)
使用lombok的代码
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class User {
@Getter(AccessLevel.PROTECTED) @Setter private Integer age;
@Getter @Setter private String name;
@Getter @Setter private String sex;
}
等效于代码
public class User {
private String name;
private Integer age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected Integer getAge() {
return age;
}
protected void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
@ToString
生成toString()方法,默认情况下,它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段@ToString(exclude = {“sex”,”name”})
import lombok.ToString;
@ToString(exclude = {"name","sex"})
public class User {
private String name;
private Integer age;
private String sex;
}
等效于
public class User {
private String name;
private Integer age;
private String sex;
public String toString(){
return "User(age="+age+")";
}
@EqualsAndHashCode
生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在parameter参数中命名它们来准确指定希望使用哪些字段。
@AllArgsConstructor
@AllArgsConstructor 生成一个全参数的构造方法
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class User {
private String name;
private Integer age;
private String sex;
}
等效代码
public class User {
private String name;
private Integer age;
private String sex;
public User(String name,Integer age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
}
@Data
@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能
比较强大且实用的注解就是这个
后记
还有很多其他的注解比如@Cleanup可以自动调用close()方法,不需要手动去写;@NonNull可以避免空指针,还有很多其他的注解可以参考官方文档或者查阅其他资料。
但是这里需要说明的一点是lombok虽然简化了代码,使得更易阅读,但它毕竟只是一个工具,并不是流行且必须的标准。使用它需要在IDE安装插件,当其他不知道lombok的人接触你的工程时会对一片的红叉错误一脸懵逼。究竟是使用投机取巧的lombok还是遵循标准java规范编写get\set\toString方法呢,希望各位读者都有自己的一个取舍标准。最后谢谢大家阅读。