文章目录
- 注解详解
- lombok包下
- 注解汇总
- - Getter
- - Setter
- - ToString
- - EqualsAndHashCode
- - Data
- - Value
- - NonNull
- - NoArgsConstructor
- - AllArgsConstructor
- - RequiredArgsConstructor
- - Builder
- - Synchronized
- - Cleanup
- - Singular
- - Generated
- - SneakyThrows
- - val
- - var
- experimental包下
- 注解汇总
- - Accessors
- - Delegate
- - SuperBuilder
- - PackagePrivate
- - Helper
- - ExtensionMethod
- - UtilityClass
- - Wither
- - Tolerate
- - FieldDefaults
- - NonFinal
- - FieldNameConstants
- extern包下
- 注解汇总
- - CommonsLog
- - Flogger
- - Log
- - JBossLog
- - Log4j
- - Log4j2
- - Slf4j
注解详解
Lombok提供了很多注解用于生成Java代码,主要存放于lombok、experimental、extern包下。
lombok包下
注解汇总
注解名称 | 作用 |
---|---|
Getter | 注解在类上或属性上,为类的所有属性或单个属性自动生成getter方法 |
Setter | 注解在类上或属性上,为类的所有属性或单个属性自动生成setter方法 |
ToString | 注解在类上,自动生成类的toString方法 |
EqualsAndHashCode | 注解在类上,自动生成类的equals和hashCode方法 |
Data | 注解在类上,自动生成getter、setter、toString、equals和hashCode方法 |
Value | 注解在类上,创建不可变类,属性定义为不可变,自动生成getter、toString、equals和hashCode方法 |
NonNull | 注解在方法、属性、参数等上,标记字段为非空,如果为空则抛出异常 |
NoArgsConstructor | 生成无参构造函数 |
AllArgsConstructor | 生成包含所有参数的构造函数 |
RequiredArgsConstructor | 注解在类上,生成包含所有必需参数的构造函数(如:final修饰的参数、@NonNull注解的属性) |
Builder | 注解在类上,被注解的类加上构造者模式(链式赋值),可使用建造者模式创建对象 |
Synchronized | 注解在方法上,为方法添加同步锁 |
Cleanup | 注解在实例化的“流”对象前,使用完后自动关闭流 |
Singular | 注解在属性上,为集合字段生成单个元素方法,需要配合 @Builder 使用 |
Generated | 标记生成的代码 |
SneakyThrows | 自动捕获可能抛出的已检查异常,并重新抛出,不会再发生已检查异常未捕获或抛出时,代码报红的情况。 |
val | 声明不可变变量,使用推断类型 |
var | 声明变量,使用推断类型 |
- Getter
- Setter
- ToString
- EqualsAndHashCode
- Data
- Value
@Value 注解和 @Data 类似,区别在于它会把类和所有成员变量默认定义为 private final 修饰,自动生成getter、toString、equals和hashCode方法,但并不生成setter方法。
- NonNull
- NoArgsConstructor
- AllArgsConstructor
- RequiredArgsConstructor
- Builder
- Synchronized
- Cleanup
- Singular
- Generated
- SneakyThrows
已检查异常未捕获或抛出时,代码报红:
使用SneakyThrows:
- val
- var
experimental包下
注解汇总
注解名称 | 作用 |
---|---|
Accessors | 配置生成的 getter 和 setter 方法的命名策略。通过设置不同的参数,可以控制生成的方法是否使用链式调用(chain)、是否使用流式调用(fluent)等 |
Delegate | 可以对任何字段或无参数方法进行注释,生成委托方法,允许将一个对象的方法委托给另一个对象。通常用于将某个对象的复杂操作委托给其他类,以保持类的简洁性和可维护性。 |
SuperBuilder | 在生成的 Builder 模式中包含父类属性。通常用于子类继承父类,并希望在子类中生成 Builder 模式时包含父类的属性。 |
PackagePrivate | 自动生成包私有访问级别的方法或字段。这样的方法或字段只能被同一包中的其他类访问,不对外暴露,提高了类的封装性。 |
Helper | 将一个类标记为辅助类,用于帮助生成其他类。通常用于为特定功能提供支持的类,但不是该功能的主要实现类。 |
ExtensionMethod | 向现有类添加额外的方法。允许在不修改原始类的情况下,为该类添加新的方法,以实现功能扩展。 |
UtilityClass | 将一个类标记为实用工具类,自动添加私有构造函数和静态方法。通常用于包含一组静态方法,这些方法与类的实例状态无关,只是一组通用的功能方法。 |
Wither | 生成带有某个字段修改器的方法,用于生成新的对象。通常用于不可变对象中,用于创建新的对象并修改其中一个字段的值,而不改变原始对象。 |
Tolerate | 允许 Lombok 忽略特定的警告。在某些情况下,Lombok 自动生成的代码可能会引发 IDE 或编译器的警告,可以使用该注解来抑制这些警告。 |
FieldDefaults | 为字段添加默认修饰符,如 private、protected 等。通过设置不同的参数,可以为字段设置默认的修饰符和默认值,提高了代码的可读性和可维护性。 |
NonFinal | 标记一个字段,使其不会生成 final 修饰符。通常用于标记类中的字段,以防止 Lombok 自动生成的代码为字段添加 final 修饰符,从而允许字段的值在对象创建后进行修改。 |
FieldNameConstants | 自动生成字段名的常量。通过该注解,可以在一个接口中定义所有字段的名称常量,避免在代码中直接使用字符串,提高了代码的可维护性和可读性。 |
- Accessors
- Delegate
- SuperBuilder
- PackagePrivate
- Helper
- ExtensionMethod
- UtilityClass
- Wither
- Tolerate
- FieldDefaults
- NonFinal
- FieldNameConstants
extern包下
extern包中,主要是针对日志,会自动生成日志对象,然后可以直接使用log对象打印日志。
注解汇总
注解名称 | 作用 |
---|---|
CommonsLog | private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class) |
Flogger | private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass() |
Log | private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName()) |
JBossLog | private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class) |
Log4j | private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class) |
Log4j2 | private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class) |
Slf4j | private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class) |
XSlf4j | private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class) |