Lombok介绍及使用方法

2018年01月18日 14:10:14 天边tbdp 阅读数:1784

lombok简介

lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特此来推荐一下。

lombok的官方地址:https://projectlombok.org/

lombok的Github地址:https://github.com/rzwitserloot/lombok

那么lombok到底是个什么呢,lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。

lombok能够达到的效果就是在源码中不需要写一些通用的方法,但是在编译生成的字节码文件中会帮我们生成这些方法,这就是lombok的神奇作用。

虽然有人可能会说IDE里面都自带自动生成这些方法的功能,但是使用lombok会使你的代码看起来更加简洁,写起来也更加方便。

lombok安装

lombok的安装跟一般引用jar包没有什么区别,可以到官网上下载最新的jar包,然后导入到项目里面就好啦。

Maven添加依赖

 
  1. <dependencies>

  2. <dependency>

  3. <groupId>org.projectlombok</groupId>

  4. <artifactId>lombok</artifactId>

  5. <version>1.16.10</version>

  6. </dependency>

  7. </dependencies>

Intellij idea开发的话需要安装Lombok plugin,同时设置 Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾选。

lombok使用

lombok使用过程中主要是靠注解起作用的,官网上的文档里面有所有的注解,这里不一一罗列,只说明其中几个比较常用的。

@NonNull: 可以帮助我们避免空指针。

使用lombok:

 
  1. import lombok.NonNull;

  2. public class NonNullExample extends Something {

  3. private String name;

  4. public NonNullExample(@NonNull Person person) {

  5. super("Hello");

  6. this.name = person.getName();

  7. }

  8. }

不使用lombok:

 
  1. public class NonNullExample extends Something {

  2. private String name;

  3. public NonNullExample(@NonNull Person person) {

  4. super("Hello");

  5. if (person == null) {

  6. throw new NullPointerException("person");

  7. }

  8. this.name = person.getName();

  9. }

  10. }

@Cleanup: 自动帮我们调用close()方法。

使用lombok:

 
  1. import lombok.Cleanup;

  2. import java.io.*;

  3. public class CleanupExample {

  4. public static void main(String[] args) throws IOException {

  5. @Cleanup InputStream in = new FileInputStream(args[0]);

  6. @Cleanup OutputStream out = new FileOutputStream(args[1]);

  7. byte[] b = new byte[10000];

  8. while (true) {

  9. int r = in.read(b);

  10. if (r == -1) break;

  11. out.write(b, 0, r);

  12. }

  13. }

  14. }

不使用lombok:

 
  1. import java.io.*;

  2. public class CleanupExample {

  3. public static void main(String[] args) throws IOException {

  4. InputStream in = new FileInputStream(args[0]);

  5. try {

  6. OutputStream out = new FileOutputStream(args[1]);

  7. try {

  8. byte[] b = new byte[10000];

  9. while (true) {

  10. int r = in.read(b);

  11. if (r == -1) break;

  12. out.write(b, 0, r);

  13. }

  14. } finally {

  15. if (out != null) {

  16. out.close();

  17. }

  18. }

  19. } finally {

  20. if (in != null) {

  21. in.close();

  22. }

  23. }

  24. }

  25. }

@Getter / @Setter: 自动生成Getter/Setter方法

使用lombok:

 
  1. import lombok.AccessLevel;

  2. import lombok.Getter;

  3. import lombok.Setter;

  4. public class GetterSetterExample {

  5. @Getter @Setter private int age = 10;

  6. @Setter(AccessLevel.PROTECTED) private String name;

  7. }

不使用lombok:

 
  1. public class GetterSetterExample {

  2. private int age = 10;

  3. private String name;

  4. public int getAge() {

  5. return age;

  6. }

  7. public void setAge(int age) {

  8. this.age = age;

  9. }

  10. protected void setName(String name) {

  11. this.name = name;

  12. }

  13. }

@NoArgsConstructor: 自动生成无参数构造函数。

@AllArgsConstructor: 自动生成全参数构造函数。

@Data自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!

 

lombok 注解:
    lombok 提供的注解不多,可以参考官方视频的讲解和官方文档。
    Lombok 注解在线帮助文档:http://projectlombok.org/features/index.
    下面介绍几个我常用的 lombok 注解:
        @Data   :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
        @Setter:注解在属性上;为属性提供 setting 方法
        @Getter:注解在属性上;为属性提供 getting 方法
        @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
        @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
        @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

下面是简单示例
    1.不使用 lombok 的方案

 1
 2public class Person {
 3
 4    private String id;
 5    private String name;
 6    private String identity;
 7    private Logger log = Logger.getLogger(Person.class);
 8    
 9    public Person() {
10        
11    }
12    
13    public Person(String id, String name, String identity) {
14        this.id              = id;
15        this.name       = name;
16        this.identity  = identity;
17    }
18    
19    public String getId() {
20        return id;
21    }
22    
23    public String getName() {
24        return name;
25    }
26    
27    public String getIdentity() {
28        return identity;
29    }
30    
31    public void setId(String id) {
32        this.id = id;
33    }
34    
35    public void setName(String name) {
36        this.name = name;
37    }
38    
39    public void setIdentity(String identity) {
40        this.identity = identity;
41    }
42}
43


    2.使用 lombok 的方案

 1
 2@Data
 3@Log4j
 4@NoArgsConstructor
 5@AllArgsConstructor
 6public class Person {
 7
 8    private String id;
 9    private String name;
10  private String identity;
11    
12}
13

 

还有其他一些比如自动生成日志对象等等之类的注解可以到官方网站去了解,就不一一列举了。

官方文档https://projectlombok.org/features/index.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值