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里可以直接看到生成的方法:(下图中打红圈的都是自动生成的)
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。