lombok可以通过简单的注解的形式来帮助我们简化和消除一些必须有但显得很臃肿的Java代码,比如常见的Getter&Setter、toString()、构造函数等等。lombok不仅方便编写,同时也让我们的代码更简洁。 lombok提供了一个功能完整的jar包,可以很方便的与我们的项目进行集成。
以maven项目为例,pom文件中引入:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
下载lombok.jar,(https://projectlombok.org/download.html),建议下载与项目中依赖的lombok版本一致或者更高。 将下载好的lombok.jar移至eclipse的根目录,和 eclipse.ini 文件平级的。 在lombok.jar 的目录下,运行:
java -jar lombok.jar a. 运行后会弹框如下框,直接点确定
b. 点specify location 按钮,选择eclipse的安装目录,选择到eclipse层即可。 按如下图步骤点击install即可
c. 成功后如下图:
黑框框也多了很多log:
看看是否真的安装成功,可以在 eclipse.ini 中看看,我的环境是多了一行(-javaagent:D:\Program Files\eclipse\lombok.jar)
重启eclipse,再clean project。
若是idea,则打开IDEA,选择 file -> settings -> plugins; 在搜索框中输入Lombok plugin,点击install;重启IDEA,安装完成。
** @NonNull** 给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)。
** @Getter/@Setter** 使用在成员变量或者类上,为特定成员变量/类中所有变量生成Getter/Setter方法。
@ToString 用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性。
@EqualsAndHashCode 自动生成hashCode() 和 equals()方法。
@Data 注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor
示例: 使用@Data注释改造下DataDemo,效果如下。需要注意的是使用@RequiredArgsConstrutor生成静态方法需指定staticConstructor的值。
@Data(staticConstructor = "lombok")
public class DataDemo{
private final String name;
@Setter(value = AccessLevel.PACKAGE) private int age;
private double score;
private String[] tags;
@ToString(includeFieldNames=true)
@Data(staticConstructor="of")
public static class Exercise<T> {
private final String name;
private final T value;
}
}
@Value 用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法,具体示例可以参考@Data部分
@Log lombok可以快速生成多种常用日志实例,包括Commonslog、log、log4j、slf4j等等,具体的使用可以依照需求灵活选择。
** @Cleanup** 这个注解用在变量前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的close()方法,如果该资源有其它关闭方法,可使用@Cleanup(“methodName”)来指定要调用的方法. 示例: @Cleanup不仅减少了代码编写,同时也避免了可能的泄露问题,CleanUpDemo的lombok改造效果如下。
public class CleanUpDemo {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
本文由来源 jackaroo2020,由 javajgs_com 整理编辑,其版权均为 jackaroo2020 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。