[JAVA]探测 Lombok 工具

  Lombok 是一种 Java™ 实用工具,它通过注释来帮助开发人员消除 Java 的冗长部分,尤其是简单的 Java 对象(POJO)。Lombok是如何消除Java中的冗长部分,可浏览《以简单的方式消除 Java 的冗长》。在这里,笔者只是介绍通过反编译由此生成的类文件,从中可看出 Lombok 工具都做了哪些事情。

  1,编程时需要写的源文件(Lure.java)。我们假设 数据对象不想去写getter/setter等方法;color 属性是不需要包含在toString()、equals()、hashCode()方法中;而且 size 属性是只有包可见访问限制;以及operate()方法要求同步,且内部逻辑需要简化 try/finally语句样式。正如我们看到的,所需要写的代码如下所示,非常简洁。

  @ToString(exclude="color")

  @EqualsAndHashCode(exclude="color")

  public @Data class Lure {

  private String name;

  private @Getter(AccessLevel.PACKAGE) int size;

  private String color;

  private String style;

  private boolean active;

  @Synchronized

  public void operate(String[] args) throws IOException {

  @Cleanup InputStream in = new FileInputStream(args[0]);

  @Cleanup OutputStream out = new FileOutputStream(args[1]);

  //write file code goes here

  }

  }

  2,通过 javap 获得编译后的源文件(Lure.java)。显然,我们没有看到 @Synchronized 说起的作用。事实上,Lombok 是通过添加一个$lock对象来实现的,事实上,可以给 @Synchronized 添加参数的,比如@Synchronized("localock")。而有关toString()、equals()和hashCode()方法的实际情况,只有通过 JD 反编译其类文件后才查看得到(详见 3)。

  D:\lombok\src\javac -cp lombok.jar Lure.java

  D:\lombok\src\javap Lure

  Compiled from "Lure.java"

  public class Lure extends java.lang.Object{

  public void operate(java.lang.String[]) throws java.io.IOException;

  public java.lang.String toString();http://mianzhufuzhuang.com

  public boolean equals(java.lang.Object);

  public int hashCode();=sducc1123

  public spike.lombok.Lure();

  public java.lang.String getName();

  public void setName(java.lang.String);

  public void setSize(int);

  public java.lang.String getColor();

  public void setColor(java.lang.String);

  public java.lang.String getStyle();

  public void setStyle(java.lang.String);

  public boolean isActive();

  public void setActive(boolean);

  int getSize();

  }

  此外,通过 Eclipse IDE工具,可浏览到经 Lombok 注释编织代码后的代码树(Outline)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值