lombok简介
lombok是暑假来到公司实习的时候发现的一个很是好用的小工具,刚见到的时候就感受很是惊艳,有一种相见恨晚的感受,用了一段时间以后感受的确挺不错,因此特此来推荐一下。html
lombok的官方地址:https://projectlombok.org/java
lombok的Github地址:https://github.com/rzwitserloot/lombokgit
那么lombok究竟是个什么呢,lombok是一个能够经过简单的注解的形式来帮助咱们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来讲,好比咱们新建了一个类,而后在其中写了几个字段,而后一般状况下咱们须要手动去创建getter和setter方法啊,构造函数啊之类的,lombok的做用就是为了省去咱们手动建立这些代码的麻烦,它可以在咱们编译源码的时候自动帮咱们生成这些方法。github
lombok可以达到的效果就是在源码中不须要写一些通用的方法,可是在编译生成的字节码文件中会帮咱们生成这些方法,这就是lombok的神奇做用。markdown
虽然有人可能会说IDE里面都自带自动生成这些方法的功能,可是使用lombok会使你的代码看起来更加简洁,写起来也更加方便。ide
lombok安装
lombok的安装跟通常引用jar包没有什么区别,能够到官网上下载最新的jar包,而后导入到项目里面就好啦。函数
Maven添加依赖工具
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> </dependencies>
Intellij idea开发的话须要安装Lombok plugin,同时设置 Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾选。post
lombok使用
lombok使用过程当中主要是靠注解起做用的,官网上的文档里面有全部的注解,这里不一一罗列,只说明其中几个比较经常使用的。网站
@NonNull
: 能够帮助咱们避免空指针。
使用lombok:
import lombok.NonNull; public class NonNullExample extends Something { private String name; public NonNullExample(@NonNull Person person) { super("Hello"); this.name = person.getName(); } }
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(); } }
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(); } }
@Cleanup
: 自动帮咱们调用close()
方法。
使用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); } } }
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(); } } } }
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; }
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; } }
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!
还有其余一些好比自动生成日志对象等等之类的注解能够到官方网站去了解,就不一一列举了。