简介
Lombok是一种Java的实用工具,可以帮助开发人员消除Java的冗长,尤其是对于简单的Java对象(POJO),它通过注释实现这一目的;一个标准的Java bean 一般具有若干个属性,每个属性具有getter()和setter方法,Lombok中也用到了注解,但是它并没有用到反射,而是通过一些奇技能淫巧,在代码编译时期动态将注解替换成具体的代码,所以JVM实际运行的代码,和我们手动编写的包含了各种工具方法的类相同
使用
使用前提
这里我是在idea中使用的,首先我们来安装插件
File—>Settings—>Plugins 然后再搜索Lombok
添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
注解的介绍
- @val: 注解在属性前面,声明一个final的变量(可以不声明类型)
- @var:与val差不多,但没有用final声明
- @Data: 注解在类上,将类提供的所有属性都添加get,set方法,并添加,equals,canEquals,hashCode,toString方法
- @Getter: 注解在类上,为所有的属性添加get方法,注解在属性上为该属性提供get方法
- @Setter: 注解在类上,为所有的属性添加set方法,注解在属性上为该属性提供set方法
- @NotNull: 在参数中使用时,如果调用时传了null值,就会抛出空指针异常
- @Synchronized: 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定
- @Log: 作用于类,创建一个log属性
- @Builder: 使用builder模式创建对象
- @NoArgsConstructor: 创建一个无参构造函数
- @AllArgsConstructor: 创建一个全参构造函数
- @ToString: 创建一个toString方法
- @Accessors(chain = true)使用链式设置属性,set方法返回的是this对象
- @RequiredArgsConstructor: 创建对象,例:在class上添加@RequiredArgsConstructor(staticName = “of”)会创建生成一个静态方法
- @UtilityClass: 工具类
- @ExtensionMethod: 设置父类
- @FieldDefaults: 设置属性的使用范围,如private,public等,也可以设置属性是否被final修饰
- @Cleanup: 关闭流,连接点
- @EqualsAndHashCode: 重写equals和hashcode方法
- @toString: 创建toString方法
- @Cleanup: 用于流等可以不需要关闭使用流对象
使用的例子
val
可以看到可以正常编译,但运行的时候就检测到了并且报错了
@Getter
package com.jbit.entity;
import lombok.Getter;
@Getter
public class User {
private String id;
private String name;
private Integer age;
public static void main(String[] args) {
User user = new User();
System.out.println(user.getAge());
}
}
@Setter
package com.jbit.entity;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String id;
private String name;
private Integer age;
public static void main(String[] args) {
User user = new User();
user.setAge(10);
System.out.println(user.getAge());
}
}
@Data
package com.jbit.entity;
import lombok.Data;
@Data
public class User {
private String id;
private String name;
private Integer age;
public static void main(String[] args) {
User user = new User();
user.setAge(10);
user.setName("张三");
System.out.println(user.getAge());
System.out.println(user.toString());
}
}
@Accessors(chain = true):使用链式创建
package com.jbit.entity;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class User {
private String id;
private String name;
private Integer age;
public static void main(String[] args) {
User user = new User();
user.setId("1").setName("chain").setAge(1);
System.out.println(user.toString());
}
}
@Builder:使用builder模式创建对象
package com.jbit.entity;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class User {
private String id;
private String name;
private Integer age;
public static void main(String[] args) {
User user = User.builder().id("1").name("builder").age(1).build();
System.out.println(user.toString());
}
}
@UtilityClass: 工具类注解
package com.jbit.entity;
import lombok.experimental.UtilityClass;
@UtilityClass
public class Utility {
public String getName(){
return "name";
}
public static void main(String[] args) {
System.out.println(Utility.getName());
}
}
参考链接:https://www.jianshu.com/p/2ea9ff98f7d6