zoukankan      html  css  js  c++  java
  • 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 

    然后

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

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

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

      

  • 相关阅读:
    分水岭分割算法(watershed segmentation)的C++实现(法2)
    ubuntu16.04下安装opencv3.3
    分水岭分割算法(watershed segmentation)的C++实现(法1)
    dpkg: 处理归档 /var/cache/apt/archives/swig2.0_2.0.12-1ubuntu4_amd64.deb (--unpack)时出错:
    ubuntu16.04安装pycharm
    ImportError: liblapack.so.3: cannot open shared object file问题
    Linux下使用Opencv打开笔记本摄像头
    目标跟踪算法meanshift优缺点
    Jacobian矩阵和Hessian矩阵
    机器视觉中的目标检测
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/lombok-with-intellij-idea.html
Copyright © 2011-2022 走看看