lombok可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的java代码(比如说getter或者setter方法,构造函数之类的。)它可以在我们编译源码时自动帮我们生成这些方法。
使用lombok我们可以在源码中不需要写一些通用的方法,在编译生成的字节码文件中帮我们生成这些方法,使代码更简洁。
lombok使用
-
maven添加依赖
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> </dependencies>
在idea里面需要安装Lombok plugin,同时设置Setting -> Compiler -> Annotation Process -> 勾选Enable annotation processing
-
Lombok主要靠使用注解。官网上的文档里有所有的注解。
import lombok.NonNull; public class NonNullExample extends Something { private String name; public NonNullExample(@NonNull Person person) { super("Hello"); this.name = person.getName(); } }
不使用lombok:
public class NonNullExample extends Something { private String name; public NonNullExample(@NonNull Person person) { super("Hello"); if (person == null) { throw new NullPointerException("person"); } this.name = person.getName(); } }
使用lombok:
import lombok.Cleanup; import java.io.*; public class CleanupExample { 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:
import java.io.*; public class CleanupExample { public static void main(String[] args) throws IOException { InputStream in = new FileInputStream(args[0]); try { OutputStream out = new FileOutputStream(args[1]); try { byte[] b = new byte[10000]; while (true) { int r = in.read(b); if (r == -1) break; out.write(b, 0, r); } } finally { if (out != null) { out.close(); } } } finally { if (in != null) { in.close(); } } } }
*
@Getter / @Setter
: 自动生成Getter/Setter方法使用lombok:
import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; public class GetterSetterExample { @Getter @Setter private int age = 10; @Setter(AccessLevel.PROTECTED) private String name; }
不使用lombok:
public class GetterSetterExample { private int age = 10; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } protected void setName(String name) { this.name = name; } }
@NoArgsConstructor
: 自动生成无参数构造函数。@AllArgsConstructor
: 自动生成全参数构造函数。@Data
: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!还有其他一些比如自动生成日志对象等等之类的注解可以到官方网站去了解,就不一一列举了。