目录
环境准备
项目准备
编写脚本
运行脚本
传送门:《Lombok 使用详解》
Delombok
原本就是 Lombok
出的一个神器,可以让你使用一个命令把 Lombok
注解实现的类文件转换为不使用 Lombok
的 Java
源文件。如果是 src
整个目录,可以递归的实现转换,Delombok
会自动过滤非 Lombok
注解的文件进行原样拷贝。
Delombok
的出现让我们不仅可以了解到 Lombok
的实现内幕
,还可以很好的做系统升级,比如要生成 javadoc
或者使用 Google Widget Toolkit
都是不支持 Lombok
的,这时候就可以使用 Delombok
进行反编译
,同时也能解决我们使用 Lombok
升级 JDK
带来的不兼容问题。
话不多少直接 run
起来
直接在官网下载 lombok.jar
https://projectlombok.org/downloads/lombok.jar
创建项目,分别编写 User.java 和 application.properties,UserMapper.xml ,User.java 是使用的 Lombok
的 Java 类,其余两个配置文件为了验证 Delombok
的功能,最后把刚才下载下来的 lombok.jar
放在项目的根目录。
其中 User.java 的文件如下
package com.github.juice.resume;
import lombok.*;
import java.io.FileInputStream;
import java.io.InputStream;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
private String id;
private String name;
private String desc;
public static void main(String[] args) {
// @NoArgsConstructor 生成
new User();
// @AllArgsConstructor 生成
new User("juice-resume", "果汁简历", "专注于 Java 方向技术分享");
// @Builder 生成
User user = User.builder().id("juice-resume").name("果汁简历").desc("专注于 Java 方向技术分享").build();
}
// @SneakyThrows 自动生成 throws FileNotFoundException
@SneakyThrows
private void read() {
// @Cleanup 相当于 inputStream.close();
@Cleanup
InputStream inputStream = new FileInputStream("");
}
/**
* @Synchronized private final Object $lock = new Object[0];
* public void write() {
* synchronized(this.$lock) {
* System.out.println("write");
* }
* }
*/
@Synchronized
public void write() {
System.out.println("write");
}
}
为了不影响原有的项目结构,同时还能保留反编译
前的内容,所有我直接重命名 src
为src-lombok
,然后再从src-lombok
到src
进行反编译,脚本如下
mv src src-lombok
java -jar lombok.jar delombok lombok-src -d src
运行脚本,然后检查目录
sh delombok.sh
运行命令以后我们可以检查结果,所有文件都被复制,但是User.java
文件被“反编译”了,如下
// Generated by delombok at Fri Jul 10 07:52:41 CST 2020
package com.github.juice.resume;
import lombok.*;
import java.io.FileInputStream;
import java.io.InputStream;
public class User {
// @NoArgsConstructor 生成
// @AllArgsConstructor 生成
// @Builder 生成
// @SneakyThrows 自动生成 throws FileNotFoundException
// @Cleanup 相当于 inputStream.close();
@java.lang.SuppressWarnings("all")
private final java.lang.Object $lock = new java.lang.Object[0];
private String id;
private String name;
private String desc;
public static void main(String[] args) {
new User();
new User("juice-resume", "果汁简历", "专注于 Java 方向技术分享");
User user = User.builder().id("juice-resume").name("果汁简历").desc("专注于 Java 方向技术分享").build();
}
private void read() {
try {
InputStream inputStream = new FileInputStream("");
try {
} finally {
if (java.util.Collections.singletonList(inputStream).get(0) != null) {
inputStream.close();
}
}
} catch (final java.lang.Throwable $ex) {
throw lombok.Lombok.sneakyThrow($ex);
}
}
/**
* @Synchronized private final Object $lock = new Object[0];
* public void write() {
* synchronized(this.$lock) {
* System.out.println("write");
* }
* }
*/
public void write() {
synchronized (this.$lock) {
System.out.println("write");
}
}
@java.lang.SuppressWarnings("all")
public static class UserBuilder {
@java.lang.SuppressWarnings("all")
private String id;
@java.lang.SuppressWarnings("all")
private String name;
@java.lang.SuppressWarnings("all")
private String desc;
@java.lang.SuppressWarnings("all")
UserBuilder() {
}
@java.lang.SuppressWarnings("all")
public User.UserBuilder id(final String id) {
this.id = id;
return this;
}
@java.lang.SuppressWarnings("all")
public User.UserBuilder name(final String name) {
this.name = name;
return this;
}
@java.lang.SuppressWarnings("all")
public User.UserBuilder desc(final String desc) {
this.desc = desc;
return this;
}
@java.lang.SuppressWarnings("all")
public User build() {
return new User(this.id, this.name, this.desc);
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public java.lang.String toString() {
return "User.UserBuilder(id=" + this.id + ", name=" + this.name + ", desc=" + this.desc + ")";
}
}
@java.lang.SuppressWarnings("all")
public static User.UserBuilder builder() {
return new User.UserBuilder();
}
@java.lang.SuppressWarnings("all")
public String getId() {
return this.id;
}
@java.lang.SuppressWarnings("all")
public String getName() {
return this.name;
}
@java.lang.SuppressWarnings("all")
public String getDesc() {
return this.desc;
}
@java.lang.SuppressWarnings("all")
public void setId(final String id) {
this.id = id;
}
@java.lang.SuppressWarnings("all")
public void setName(final String name) {
this.name = name;
}
@java.lang.SuppressWarnings("all")
public void setDesc(final String desc) {
this.desc = desc;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public boolean equals(final java.lang.Object o) {
if (o == this) return true;
if (!(o instanceof User)) return false;
final User other = (User) o;
if (!other.canEqual((java.lang.Object) this)) return false;
final java.lang.Object this$id = this.getId();
final java.lang.Object other$id = other.getId();
if (this$id == null ? other$id != null : !this$id.equals(other$id)) return false;
final java.lang.Object this$name = this.getName();
final java.lang.Object other$name = other.getName();
if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
final java.lang.Object this$desc = this.getDesc();
final java.lang.Object other$desc = other.getDesc();
if (this$desc == null ? other$desc != null : !this$desc.equals(other$desc)) return false;
return true;
}
@java.lang.SuppressWarnings("all")
protected boolean canEqual(final java.lang.Object other) {
return other instanceof User;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public int hashCode() {
final int PRIME = 59;
int result = 1;
final java.lang.Object $id = this.getId();
result = result * PRIME + ($id == null ? 43 : $id.hashCode());
final java.lang.Object $name = this.getName();
result = result * PRIME + ($name == null ? 43 : $name.hashCode());
final java.lang.Object $desc = this.getDesc();
result = result * PRIME + ($desc == null ? 43 : $desc.hashCode());
return result;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public java.lang.String toString() {
return "User(id=" + this.getId() + ", name=" + this.getName() + ", desc=" + this.getDesc() + ")";
}
@java.lang.SuppressWarnings("all")
public User() {
}
@java.lang.SuppressWarnings("all")
public User(final String id, final String name, final String desc) {
this.id = id;
this.name = name;
this.desc = desc;
}
}
OK,你get到了吗?