在使用lombok
以前:java
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 + '\'' + '}'; } }
在使用以后:eclipse
@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
这些大部分类似,却又不得不写的代码了。ide
一共有三个步骤函数
为你的开发工具安装插件。工具
下载并导入Jar包,下载地址插件
在须要的类上标注注解code
目前我使用的版本是1.16.16
,有下面几个经常使用注解:
生成Getter
、Setter
、toString
、equals
、hashCode
方法。
可标注:Class
生成Getter
、toString
、equals
、hashCode
、还有全字段的构造方法。而且会将字段全都添加final
。
可标注:Class
在类内部生成一个名为类名+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
方法。
可标注:Field
,Class
为你的构造函数、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)
它还具有不少好用的功能,你能够去这里看看。