Lombok 注解简介
Lombok
- @AllArgsConstructor
/**
* 生成一个包含所有属性的构造函数
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface AllArgsConstructor {
/**
* 如果设置了该属性,则生成的构造函数将被设置为 private,并增加一个静态的方法来创建实例,
* 静态方法将包含构造函数的所有属性,静态方法的名称为 staticName 的属性值。
*/
String staticName() default "";
AnyAnnotation[] onConstructor() default {};
/**
* 生成构造函数的访问级别,默认是 PUBLIC
*/
AccessLevel access() default lombok.AccessLevel.PUBLIC;
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
}
- @RequiredArgsConstructor
/**
* 生成一个包含所有 final 属性或有约束的属性【@NonNull】的构造函数
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface RequiredArgsConstructor {
/**
* 如果设置了该属性,则生成的构造函数将被设置为 private,并增加一个静态的方法来创建实例,
* 静态方法将包含构造函数的所有属性,静态方法的名称为 staticName 的属性值。
*/
String staticName() default "";
AnyAnnotation[] onConstructor() default {};
/**
* 生成构造函数的访问级别,默认是 PUBLIC
*/
AccessLevel access() default lombok.AccessLevel.PUBLIC;
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
}
- @NoArgsConstructor
/**
* 尝试生成一个无参数的构造函数
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface NoArgsConstructor {
/**
* 如果设置了该属性,则生成的构造函数将被设置为 private,并增加一个静态的方法来创建实例,
* 静态方法将包含构造函数的所有属性,静态方法的名称为 staticName 的属性值。
*/
String staticName() default "";
AnyAnnotation[] onConstructor() default {};
/**
* 生成构造函数的访问级别,默认是 PUBLIC
*/
AccessLevel access() default lombok.AccessLevel.PUBLIC;
/**
* 如果存在 final 属性,则无法生成无参数的构造函数【编译失败】,如果将 force 设置为 true,
* 则所有的 final 属性将被初始化为默认值【0 / null / false】.
*/
boolean force() default false;
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
}
- @Getter
/**
* 如果该注解放置在目标属性上,则会为该属性生成一个标准的 get 方法,
* 如果该注解放置在类上,则会为类中的每一个非静态属性生成一个标准的 get 方法。
*/
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Getter {
/**
* 生成 get 方法的访问级别,默认是 PUBLIC
*/
lombok.AccessLevel value() default lombok.AccessLevel.PUBLIC;
AnyAnnotation[] onMethod() default {};
boolean lazy() default false;
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
}
- @Setter
/**
* 如果该注解放置在目标属性上,则会为该属性生成一个标准的 set 方法,
* 如果该注解放置在类上,则会为类中的每一个非静态属性生成一个标准的 set 方法。
*/
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Setter {
/**
* 生成 set 方法的访问级别,默认是 PUBLIC
*/
lombok.AccessLevel value() default lombok.AccessLevel.PUBLIC;
AnyAnnotation[] onMethod() default {};
AnyAnnotation[] onParam() default {};
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
}
- @EqualsAndHashCode
/**
* 为所有的相关属性生成 hashCode 和 equals 方法
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface EqualsAndHashCode {
/**
* 生成 hashCode 和 equals 方法时,需要排除的属性列表
*/
String[] exclude() default {};
/**
* 显式列出需要包含的属性列表,通常非静态 static 和非瞬态 transient 的属性都作为比较目标
*/
String[] of() default {};
/**
* 计算 hashCode 值之前,首先调用父类的 hashCode 方法
*/
boolean callSuper() default false;
/**
* 默认情况下,将调用 get 方法来读取属性值
*/
boolean doNotUseGetters() default false;
AnyAnnotation[] onParam() default {};
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
/**
* 只包含使用 @EqualsAndHashCode.Include 注解标记的所有属性
*/
boolean onlyExplicitlyIncluded() default false;
/**
* 不包含此单个属性值
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.SOURCE)
public @interface Exclude {}
/**
* 包含此单个属性值
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface Include {
/** Defaults to the method name of the annotated member. If on a method and the name equals the name of a default-included field, this member takes its place. */
String replaces() default "";
}
}
- @ToString
/**
* 为所有的相关属性生成 toString() 方法
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface ToString {
/**
* toString() 方法返回的字符串中是否包含属性名称
*/
boolean includeFieldNames() default true;
/**
* 生成 toString() 方法时,需要排除的属性列表
*/
String[] exclude() default {};
/**
* 生成 toString() 方法时,需要包含的属性列表
*/
String[] of() default {};
/**
* 生成 toString() 方法时,是否优先调用父类的 toString()
*/
boolean callSuper() default false;
/**
* 默认情况下,将调用 get 方法来读取属性值
*/
boolean doNotUseGetters() default false;
/**
* 只包含使用 @ToString.Include 注解标记的所有属性
*/
boolean onlyExplicitlyIncluded() default false;
/**
* 显式排除此属性
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.SOURCE)
public @interface Exclude {}
/**
* 显式包含此属性
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface Include {
/** 更高的 rank 优先打印,相同 rank 的属性按照源代码中的声明顺序打印 */
int rank() default 0;
/** 输出的属性名称 */
String name() default "";
}
}
- @NonNull
/**
* 如果该注解放置在参数上,则在构造函数或方法体执行前将会增加目标参数的 null 校验。
* 如果该注解放置在属性上,则对该属性的写操作都将添加 null 校验。
*/
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE})
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface NonNull {
}
- @Data
/**
* 等价于 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
/**
* 如果设置了该属性,则生成的构造函数将被设置为 private,并增加一个静态的方法来创建实例,
* 静态方法将包含构造函数的所有属性,静态方法的名称为 staticName 的属性值。
*/
String staticConstructor() default "";
}
- @Value
/**
* 等价于 @Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE)
* @AllArgsConstructor @ToString @EqualsAndHashCode
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Value {
/**
* 如果设置了该属性,则生成的构造函数将被设置为 private,并增加一个静态的方法来创建实例,
* 静态方法将包含构造函数的所有属性,静态方法的名称为 staticName 的属性值。
*/
String staticConstructor() default "";
}
- @Builder
/**
* fluent build API
*/
@Target({TYPE, METHOD, CONSTRUCTOR})
@Retention(SOURCE)
public @interface Builder {
/**
* 设置属性的默认值
*/
@Target(FIELD)
@Retention(SOURCE)
public @interface Default {}
/** 创建 builder 实例的方法名称 */
String builderMethodName() default "builder";
/** 构建目标实例的方法名称 */
String buildMethodName() default "build";
/**
* builder 类的名称
*/
String builderClassName() default "";
/**
* 将此类的实例转换为 builder
*/
boolean toBuilder() default false;
/**
* 只有 toBuilder 为 true 时才有效。
* 用于从目标实例中读取值,可以放置在属性、构造方法参数、静态方法上
*/
@Target({FIELD, PARAMETER})
@Retention(SOURCE)
public @interface ObtainVia {
/**
* @return Tells lombok to obtain a value with the expression {@code this.value}.
*/
String field() default "";
/**
* @return Tells lombok to obtain a value with the expression {@code this.method()}.
*/
String method() default "";
/**
* @return Tells lombok to obtain a value with the expression {@code SelfType.method(this)}; requires {@code method} to be set.
*/
boolean isStatic() default false;
}
}
- @Singular
/**
* 与 Builder 注解共同使用,用于将单个元素添加到集合属性中【放置在集合属性上】
*/
@Target({FIELD, PARAMETER})
@Retention(SOURCE)
public @interface Singular {
/** 添加单个元素的方法名称 */
String value() default "";
}
public class Lombok {
@Test
public void all() {
final User user = User.builder().addName("hello").addName("world").build();
assertEquals(2, user.names.size());
}
}
@Builder
class User{
@Singular("addName")
public List<String> names;
}
- @Cleanup
/**
* 通过 try-final 方式自动释放资源
*/
@Target(ElementType.LOCAL_VARIABLE)
@Retention(RetentionPolicy.SOURCE)
public @interface Cleanup {
/** 释放资源的无参方法名称 */
String value() default "close";
}
- @SneakyThrows
/**
* 将方法显示抛出的指定异常封装为 RuntimeException
*/
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
@Retention(RetentionPolicy.SOURCE)
public @interface SneakyThrows {
/** 需要转换的异常类型列表 */
Class<? extends Throwable>[] value() default java.lang.Throwable.class;
}
public class Lombok {
@Test
public void all() {
final String hello = "hello";
final String of = of(hello.getBytes(), "UTF-8");
assertEquals(of, hello);
}
@SneakyThrows
private static String of(byte[] bytes,String charsetName) {
return new java.lang.String(bytes, charsetName);
}
}
- @Synchronized
/**
* 使用 synchronized 关键字修饰目标方法
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Synchronized {
/**
* 需要锁定的目标字段名称,不指定时默认使用 this【实例方法】或此类的 Class 实例【静态方法】
*/
String value() default "";
}
- @val
/**
* 使用在局部变量定义处,变量的类型根据赋值表达式进行推断,该变量被 final 修饰。
*/
public @interface val {
}
public class Lombok {
@Test
public void all() {
val name = "hello";
assertEquals(name.getClass(), String.class);
val list = Lists.newArrayList();
assertEquals(list.getClass(), ArrayList.class);
}
}
- @FieldDefaults
/**
* 往此类中的每个字段添加修饰符
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface FieldDefaults {
AccessLevel level() default AccessLevel.NONE;
boolean makeFinal() default false;
}
- @UtilityClass
/**
* 用于创建工具类的注解:
* 1)类将被标记为 final
* 2)类中不能有显式声明的构造函数否则编译出错,同时添加一个私有无参构造函数,此构造函数将抛出 UnsupportedOperationException 异常
* 3)所有的属性、方法、内部类都被 static 修饰
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface UtilityClass {
}
Lombok 注解简介的更多相关文章
- lombok 注解使用
需要引入: <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok&l ...
- JAVA随笔----浅谈lombok注解
在Java开发中,注解可谓是帮了大忙.注解的使用帮助我们简化了代码,让代码更加简洁.今天就来谈谈常用的Lombok注解. lombok注解文档 lombok官方下载地址 先看一下lombok支持的一些 ...
- lombok注解介绍
lombok注解介绍 lombok注解文档lombok官网下载 lombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法 ...
- 【lombok】lombok---帮你简化生成必要但臃肿的java代码工具 【映射注解和lombok注解同时使用 以及 映射注解放在属性和get方法上的区别】
官方地址:https://projectlombok.org/ GitHub:https://github.com/rzwitserloot/lombok 指导说明文档:http://jnb.ociw ...
- eclipse中Lombok注解无效
问题现象:eclipse中使用lombok的@Date,引用get方法时,报错. 解决方案: 在lombok官网(https://www.projectlombok.org/download)下载,或 ...
- 【lombok】使用lombok注解,在代码编写过程中可以调用到get/set方法,但是在编译的时候无法通过,提示找不到get/set方法
错误如题:使用lombok注解,在代码编写过程中可以调用到get/set方法,但是在编译的时候无法通过,提示找不到get/set方法 报错如下: 解决方法: 1.首先查看你的lombok插件是否下载安 ...
- 夯实Java基础系列15:Java注解简介和最佳实践
Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...
- lombok 注解
lombok 注解 1. 什么是 lombok 注解 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现 ...
- lombok 注解简单介绍
一.Lombok 的简单介绍和使用 Lombok是一个可以帮助我们简化 Java 代码编写的工具类,通过采用注解的方式简化了 JavaBean 的编写,使我们写的类更加简洁. 1. 添加 Lombok ...
随机推荐
- 阿里云云效平台使用——Windows上使用阿里云云效(RDC)Git拉取代码
转载:https://blog.csdn.net/for_my_life/article/details/88700696 SSH key配置 1.首先从开始菜单里面打开刚刚安装完成的Git目录下Gi ...
- vue video.js使用
插件github地址:https://github.com/videojs/video.js 这边做一个切换视频vue url的解决记录 this.$nextTick(() => { let u ...
- 10.css3动画--过渡动画--trasition
Transition简写属性. Transition-property规定应用过渡的css属性的名称. . Transition-timing-function过渡效果的时间曲线,默认是ease. L ...
- 查询GC日志、动态年龄计算
https://www.cnblogs.com/onmyway20xx/p/6590603.html 从实际案例聊聊Java应用的GC优化 动态年龄计算 关于上文中提到晋升年龄阈值为2,很多同学有疑问 ...
- MySQL发生系统错误2 系统无法找到指定文件
https://blog.csdn.net/digitalmon/article/details/78152187 https://www.cnblogs.com/gaogaoyanjiu/p/104 ...
- 实体类相同属性间赋值与如何判断实体类中是否所有的字段都为null
1,实体类相同属性间赋值 /// <summary> /// 将实体2的值动态赋值给实体1(名称一样的属性进行赋值) /// </summary> /// <param ...
- java常用类与包装类--常用类正则表达式 String正则方法+Matcher+Pattern
0.java中的正则 java 中的正则总共涉及三个类(或者说1个String类和一个regex包) java.lang.String java.util. Matcher java.util.Pat ...
- jquery easyui datagrid 远程加载数据----javascript法
jquery easyui有三种办法生成datagrid(数据网格),本篇专门讨论javascript借助jquey easy ui实现的方式 html部分 <main role="m ...
- 百度地图api的简单应用(一):POI检索
使用之前,需要注册一个百度地图开发者账号,最好申请一个认证以获取更高的使用配额和并发上限. 注册之后,申请一个应用,获得一个ak(密钥),并填写ip地址白名单.(这里我使用0.0.0.0/0,查了自己 ...
- Vue的watch和computed方法的使用
Vue的watch属性 Vue的watch属性可以用来监听data属性中数据的变化 <!DOCTYPE html> <html> <head> <meta c ...