lombok在IntelliJ IDEA下的使用

lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少,意味着出bug的可能性越低。

官网地址:https://projectlombok.org/ 首页有一段几分钟的演示视频,看完就明白是怎么回事了。

先来二段对比代码:

这是用lombok后的java代码:

import lombok.*;

import lombok.extern.slf4j.Slf4j;

import java.io.ByteArrayInputStream;

import java.io.*;

import java.util.ArrayList;


@Data

@Slf4j

@AllArgsConstructor

public class Something {


    private String name;

    private final String country;

    private final Object lockObj = new Object();


    public void sayHello(@NonNull String target) {

        String content = String.format("hello,%s", target);

        System.out.println(content);

        log.info(content);

    }


    public void addBalabala() {

        val list = new ArrayList<String>();

        list.add("haha");

        System.out.println(list.size());

    }


    @SneakyThrows(IOException.class)

    public void closeBalabala() {

        @Cleanup InputStream is = new ByteArrayInputStream("hello world".getBytes());

        System.out.println(is.available());

    }


    @Synchronized("lockObj")

    public void lockMethod() {

        System.out.println("test lock method");

    }

}

等效于下面这段java代码:

import java.beans.ConstructorProperties;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Collections;

import lombok.NonNull;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


public class Something {

    private static final Logger log = LoggerFactory.getLogger(Something.class);

    private String name;

    private final String country;

    private final Object lockObj = new Object();


    public void sayHello(@NonNull String target) {

        if(target == null) {

            throw new NullPointerException("target");

        } else {

            String content = String.format("hello,%s", new Object[]{target});

            System.out.println(content);

            log.info(content);

        }

    }


    public void addBalabala() {

        ArrayList list = new ArrayList();

        list.add("haha");

        System.out.println(list.size());

    }


    public void closeBalabala() {

        try {

            ByteArrayInputStream $ex = new ByteArrayInputStream("hello world".getBytes());


            try {

                System.out.println($ex.available());

            } finally {

                if(Collections.singletonList($ex).get(0) != null) {

                    $ex.close();

                }


            }


        } catch (IOException var6) {

            throw var6;

        }

    }


    public void lockMethod() {

        Object var1 = this.lockObj;

        synchronized(this.lockObj) {

            System.out.println("test lock method");

        }

    }


    public String getName() {

        return this.name;

    }


    public String getCountry() {

        return this.country;

    }


    public Object getLockObj() {

        return this.lockObj;

    }


    public void setName(String name) {

        this.name = name;

    }


    public boolean equals(Object o) {

        if(o == this) {

            return true;

        } else if(!(o instanceof Something)) {

            return false;

        } else {

            Something other = (Something)o;

            if(!other.canEqual(this)) {

                return false;

            } else {

                label47: {

                    String this$name = this.getName();

                    String other$name = other.getName();

                    if(this$name == null) {

                        if(other$name == null) {

                            break label47;

                        }

                    } else if(this$name.equals(other$name)) {

                        break label47;

                    }


                    return false;

                }


                String this$country = this.getCountry();

                String other$country = other.getCountry();

                if(this$country == null) {

                    if(other$country != null) {

                        return false;

                    }

                } else if(!this$country.equals(other$country)) {

                    return false;

                }


                Object this$lockObj = this.getLockObj();

                Object other$lockObj = other.getLockObj();

                if(this$lockObj == null) {

                    if(other$lockObj != null) {

                        return false;

                    }

                } else if(!this$lockObj.equals(other$lockObj)) {

                    return false;

                }


                return true;

            }

        }

    }


    protected boolean canEqual(Object other) {

        return other instanceof Something;

    }


    public int hashCode() {

        boolean PRIME = true;

        byte result = 1;

        String $name = this.getName();

        int result1 = result * 59 + ($name == null?0:$name.hashCode());

        String $country = this.getCountry();

        result1 = result1 * 59 + ($country == null?0:$country.hashCode());

        Object $lockObj = this.getLockObj();

        result1 = result1 * 59 + ($lockObj == null?0:$lockObj.hashCode());

        return result1;

    }


    public String toString() {

        return "Something(name=" + this.getName() + ", country=" + this.getCountry() + ", lockObj=" + this.getLockObj() + ")";

    }


    @ConstructorProperties({"name", "country"})

    public Something(String name, String country) {

        this.name = name;

        this.country = country;

    }

}

大概减少了2/3的代码,各种注解的详细用法,请参考:https://projectlombok.org/features/index.html

IDEA下使用时,可以通过插件的形式安装,插件下载地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases 

安装插件需要注意版本问题:https://blog.csdn.net/wltsysterm/article/details/79798411

然后

Plugins -> Install plugin from disk... 选择下载的zip包安装,重启idea即可。

另外,还有一个关键设置:


lombok在IntelliJ IDEA下的使用

为了让设置生效,建议再重启一次idea,然后就可以开心的编码了,可以ide里可以直接看到生成的方法:(下图中打红圈的都是自动生成的)

lombok在IntelliJ IDEA下的使用  


作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。