有争议的神器——Lombok

Posted 爱上纯净的蓝天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有争议的神器——Lombok相关的知识,希望对你有一定的参考价值。

Lombok详解

简介

lombok可以通过简单的注解的形式来帮助我们简化和消除一些必须有但显得很臃肿的Java代码,比如常见的Getter&Setter、toString()、构造函数等等。lombok不仅方便编写,同时也让我们的代码更简洁。

lombok提供了一个功能完整的jar包,可以很方便的与我们的项目进行集成。

maven依赖

以maven项目为例,pom文件中引入:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
    <scope>provided</scope>
</dependency>

lombok插件安装

下载lombok.jar, 下载链接,建议下载与项目中依赖的lombok版本一致或者更高。
将下载好的lombok.jar移至eclipse的根目录,和 eclipse.ini 文件平级的。
在lombok.jar 的目录下,运行:

java -jar lombok.jar

  1. 运行后会弹框如下框,直接点确定
  2. 点specify location 按钮,选择eclipse的安装目录,选择到eclipse层即可。
    按如下图步骤点击install即可

  3. 成功后如下图:

    黑框框也多了很多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);
    
  

以上是关于有争议的神器——Lombok的主要内容,如果未能解决你的问题,请参考以下文章

有争议的神器——Lombok

充满争议的 Lombok

Java开发速度神器Lombok,Eclipse端安装使用教程

Java简化代码神器-Lombok

Lombok!代码简洁神器还是代码“亚健康”元凶?

Lombok!代码简洁神器还是代码“亚健康”元凶?