Java开发⿊科技LomBok
在⾯向对象编程中必不可少需要在代码中定义对象模型,⽽在基于Java的业务平台开发实践中尤其如此。相信⼤家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象⽐较多,⽽需要重复写
Getter/Setter、构造器⽅法、字符串输出的ToString⽅法和Equals/HashCode⽅法等。那么是否⼀款插件或⼯具能够替⼤家完成这些繁琐的操作呢?本⽂将向⼤家介绍⼀款在Eclipse/Intellij IDEA主流的开发环境中都可以使⽤的Java开发神器,同时简要地介绍下其背后⾃定义注解的原理。
Lombok的简介
Lombok是⼀款Java开发插件,使得Java开发者可以通过其定义的⼀些注解来消除业务⼯程中冗长和繁琐的代码,尤其对于简单的Java模型对象(POJO)。在开发环境中使⽤Lombok插件后,Java开发⼈员可以节省出重复构建,诸如hashCode和equals这样的⽅法以及各种业务对象模型的accessor和ToString等⽅法的⼤量时间。对于这些⽅法,它能够在编译源代码期间⾃动帮我们⽣成这些⽅法,并没有如反射那样降低程序的性能。
在Intellij中安装Lombok的插件
想要体验⼀把Lombok的话,得先在⾃⼰的开发环境中安装上对应的插件。下⾯先为⼤家展⽰下如何在Intellij中安装上Lombok插件。
如何阅读java源码通过IntelliJ的插件中⼼寻Lombok
从Intellij插件中⼼安装Lombok
另外需要注意的是,在使⽤lombok注解的时候记得要导⼊lombok.jar包到⼯程,如果使⽤的是Maven的⼯程项⽬的话,
另外需要注意的是,在使⽤lombok注解的时候记得要导⼊lombok.jar包到⼯程,如果使⽤的是Maven的⼯程项⽬的话,要在其l中添加依赖如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.8</version>
</dependency>
好了,就这么⼏步后就可以在Java⼯程中开始⽤Lombok这款开发神器了。下⽂将会给⼤家介绍Lombok中⼀些注解的使⽤⽅法,让⼤家对如何⽤这些注解有⼀个⼤致的了解。
Lombok注解使⽤⽅法
Lombok常⽤注解介绍
下⾯先来看下Lombok中主要⼏个常⽤注解介绍:
Lombok的基本使⽤⽰例
(1)Val可以将变量申明是final类型。
public static void main(String[] args) {
val setVar = new HashSet<String>();
val listsVar = new ArrayList<String>();
val mapVar = new HashMap<String, String>();
//=>上⾯代码相当于如下:
final Set<String> setVar2 = new HashSet<>();
final List<String> listsVar2 = new ArrayList<>();
final Map<String, String> maps2 = new HashMap<>();
}
}
(2)@NonNull注解能够为⽅法或构造函数的参数提供⾮空检查。public void notNullExample(@NonNull String string) {
string.length();
}
//=>相当于
public void notNullExample(String string) {
if (string != null) {
string.length();
} else {
throw new NullPointerException("null");
}
}
(3)@Cleanup注解能够⾃动释放资源。
(4) @Getter/@Setter注解可以针对类的属性字段⾃动⽣成Get/Set⽅法。
(5)@ToString注解,为使⽤该注解的类⽣成⼀个toString⽅法,默认的toString格式为:ClassName(fieldName= fieleValue ,fieldName1=fieleValue)。
@ToString(callSuper=true,exclude="someExcludedField")
public class Demo extends Bar {
private boolean someBoolean = true;
private String someStringField;
private float someExcludedField;
}
//上⾯代码相当于如下:
public class Demo extends Bar {
private boolean someBoolean = true;
private String someStringField;
private float someExcludedField;
@ Override
public String toString() {
return "Foo(super=" + String() +
", someBoolean=" + someBoolean +
", someStringField=" + someStringField + ")";
}
}
(6) @EqualsAndHashCode注解,为使⽤该注解的类⾃动⽣成equals和hashCode⽅法。
(7)@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor,这⼏个注解分别为类⾃动⽣成了⽆参构造器、指定参数的构造器和包含所有参数的构造器
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ConstructorExample<T> {
private int x, y;
@NonNull private T deion;
@NoArgsConstructor
public static class NoArgsExample {
@NonNull private String field;
}
}