摘要:可标注在类内部生成一个名为类名的内部类,用于快速构建。流程是这样的编译源代码,并生成语法树寻找实现了的代码,并调用。寻找被标注了注解的类,修改生成的语法树。将语法树生成为字节码就到这里了它还具备很多好用的功能,你可以去这里看看。
能做什么?
在使用lombok之前:
public class Book { private Integer id; private String title; private Date releaseDate; private Double price; private String[] authors; private String publisher; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getReleaseDate() { return releaseDate; } public void setReleaseDate(Date releaseDate) { this.releaseDate = releaseDate; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String[] getAuthors() { return authors; } public void setAuthors(String[] authors) { this.authors = authors; } public String getPublisher() { return publisher; } public void setPublisher(String publisher) { this.publisher = publisher; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Book)) return false; if (!super.equals(o)) return false; Book book = (Book) o; if (getId() != null ? !getId().equals(book.getId()) : book.getId() != null) return false; if (getTitle() != null ? !getTitle().equals(book.getTitle()) : book.getTitle() != null) return false; if (getReleaseDate() != null ? !getReleaseDate().equals(book.getReleaseDate()) : book.getReleaseDate() != null) return false; if (getPrice() != null ? !getPrice().equals(book.getPrice()) : book.getPrice() != null) return false; // Probably incorrect - comparing Object[] arrays with Arrays.equals if (!Arrays.equals(getAuthors(), book.getAuthors())) return false; return getPublisher() != null ? getPublisher().equals(book.getPublisher()) : book.getPublisher() == null; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (getId() != null ? getId().hashCode() : 0); result = 31 * result + (getTitle() != null ? getTitle().hashCode() : 0); result = 31 * result + (getReleaseDate() != null ? getReleaseDate().hashCode() : 0); result = 31 * result + (getPrice() != null ? getPrice().hashCode() : 0); result = 31 * result + Arrays.hashCode(getAuthors()); result = 31 * result + (getPublisher() != null ? getPublisher().hashCode() : 0); return result; } @Override public String toString() { return "Book{" + "id=" + id + ", title="" + title + """ + ", releaseDate=" + releaseDate + ", price=" + price + ", authors=" + Arrays.toString(authors) + ", publisher="" + publisher + """ + "}"; } }
在使用之后:
@Data public class Book { private Integer id; private String title; private Date releaseDate; private Double price; private String[] authors; private String publisher; }
并且从功能上,使用后=使用前。
说的简单点:从此以后不需要写Getter、Setter、toString、hashCode、canEqual、constructor这些大部分相似,却又不得不写的代码了。
一共有三个步骤
为你的开发工具安装插件。
IntelliJ IDEA: settings->Plugins->Browse Repositories->搜索Lombok Plugin->install
Eclipse / MyEclipse / Spring Tool Suite / JBoss Developer Studio: 看这里
Netbeans: 看这里
下载并导入Jar包,下载地址
在需要的类上标注注解
目前我使用的版本是1.16.16,有下面几个常用注解:
@Date生成Getter、Setter、toString、equals、hashCode方法。
可标注:Class
@Value生成Getter、toString、equals、hashCode、还有全字段的构造方法。并且会将字段全都添加final。
可标注:Class
@Builder在类内部生成一个名为类名+Builder的内部类,用于快速构建。
可标注:Class
你可以这样使用它:
@Builder public class Book { private Integer id; private String title; private Date releaseDate; private Double price; private String[] authors; private String publisher; }
public static void main(String[] args) { Book book = Book.builder().id(1).title("书名").build(); }@Getter/@Setter
生成Getter或Setter方法。如果标注在类上则会生成这个类中所有字段的Getter或Setter方法。
可标注:Field,Class
@NonNull为你的构造函数、Setter添加空值校验。标注的字段赋值为空时,会抛出NullPointerException。
可标注:Field,Method,Parameter,Local Variable
为什么?自从Java 6起,Javac就支持了一个名叫JSR 269 Pluggable Annotation Processing API的规范,它的作用就是:如果你实现了这个API,在Javac编译时就会得到调用。而lombok正是运用了这一点。
流程是这样的:
Javac编译源代码,并生成语法树(AST)
Javac寻找实现了JSR 269 .... API的代码(lombok),并调用。
lombok寻找被标注了注解的类,修改Javac生成的语法树(AST)。
Javac将语法树生成为字节码(.class)
就到这里了它还具备很多好用的功能,你可以去这里看看。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70132.html
摘要:什么是一言以蔽之是一种工具,提供了简单的注解来简化我们的重复冗长代码。但在实际的项目中,我们常常只在定义的时候用上,而在业务代码中很少用到。总结是个非常有用的工具,能够帮助我们精简很多臃肿冗长的代码,不过也有其局限性,推荐在定义中使用。 什么是Lombok 一言以蔽之:lombok是一种工具,提供了简单的注解来简化我们的重复冗长Java代码。比如一个Java Bean,注解了lombo...
摘要:注意,其是在编译源码过程中,帮你自动生成的。就是说,将极大减少你的代码总量。注解和类似,区别在于它会把所有成员变量默认定义为修饰,并且不会生成方法。不同的日志注解总结如下上面是注解,下面是编译后的代码参考资料下的安装以及使用简介注解介绍 Lombok有什么用 在我们实体Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不会用到,但是某些时候仍...
摘要:创建对象工具类设置父类设置属性的使用范围,如等,也可以设置属性是否被修饰。所以显示的是按钮重启。即使没有重写方法,依然可以调用,而且结果和重写了方法一样。最后奉上项目完整代码后语以上就是我对插件的理解与使用,希望对你们有帮助。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 上周去了开年会,去的地方是温泉度假村。老实说,我是无感的,90% 是因为没中...
摘要:还提供了全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,因为只有实体类才会存在构造函数。当然除了全部参数的构造函数,还提供了没有参数的构造函数,使用方式与一致。 Lombok对于Java偷懒开发者来说应该是比较中意的,恰恰笔者就是一个喜欢在小细节上偷懒来提高开发效率的人。所以在技术框架的海洋里寻找了很久才在GitHub开源平台上找到,而在这之前国外很多程序猿一直使用该框...
阅读 2028·2021-11-19 11:37
阅读 717·2021-11-11 16:54
阅读 1163·2021-11-02 14:44
阅读 3053·2021-09-02 15:40
阅读 2370·2019-08-30 15:44
阅读 954·2019-08-29 11:17
阅读 1062·2019-08-26 14:06
阅读 1553·2019-08-26 13:47