一、Lombok是什么?
lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。
lombok能够达到的效果就是在源码中不需要写一些通用的方法,但是在编译生成的字节码文件中会帮我们生成这些方法,这就是lombok的神奇作用。
虽然有人可能会说IDE里面都自带自动生成这些方法的功能,但是使用lombok会使你的代码看起来更加简洁,写起来也更加方便。
lombok的官方地址:https://projectlombok.org/
lombok的Github地址:https://github.com/rzwitserloot/lombok
二、Lombok安装
lombok的安装跟一般引用jar包没有什么区别,可以到官网上下载最新的jar包,然后导入到项目里面就好啦。
Maven添加依赖
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.16.10version>
dependency>
Intellij idea开发的话需要安装Lombok plugin,windows版Idea设置: Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾选。
Mac版Idea设置:Preferences->Plugins->Browse Repositiories ->搜索Lombok ->安装Lombok Plugins
三、Lombok使用
lombok使用过程中主要是靠注解起作用的,官网上的文档里面有所有的注解,这里不一一罗列,只说明其中几个比较常用的。
1、@NonNull:可以帮助我们避免空指针。
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
}
2、@Cleanup:自动帮我们调用close()方法。
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);
}
}
}
3、@Getter / @Setter: 自动生成Getter/Setter方法
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class GetterSetterExample {
@Getter @Setter private int age = 10;
@Setter(AccessLevel.PROTECTED) private String name;
}
4、@NoArgsConstructor: 自动生成无参数构造函数。
@AllArgsConstructor: 自动生成全参数构造函数。
@Data: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!此外还提供了equals、canEqual、hashCode、toString 方法
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CentralKitchenMapVO {
private CentralKitchenNodeVo currentKitchen;
private List otherKitchenNodes;
}
5、@Builder:构造一个实例,属性不需要单独set
类使用了@Builder:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CommoditySaleVolumeVO {
private Integer categoryId;
private String categoryName;
private BigDecimal totalSoldQuantity;
private BigDecimal totalSoldMoney;
private BigDecimal averagePrice;
private String saleMeasureUnit;
private String moneyMeasureUnit;
private List saleDetails;
}
通过类名.builder().build()构造类的实例,并设置属性:
CommoditySaleVolumeVO saleVolumeVO = CommoditySaleVolumeVO.builder()
.categoryId(commodityId)
.categoryName("猕猴桃")
.totalSoldQuantity(totalSoldQuantity)
.totalSoldMoney(totalSoldMoney)
.averagePrice(averagePrice)
.saleMeasureUnit("kg")
.moneyMeasureUnit("元")
.saleDetails(saleDetailVOList).build();
6、@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
参考原文:
1、http://www.cnblogs.com/holten/p/5729226.html
2、http://blog.csdn.net/mccand1234/article/details/53456411
3、官方文档:https://projectlombok.org/features/index.html