@Getter(lazy=true)
懒惰是一种美德!
@Getter(lazy=true)
在 Lombok v0.10 中引入。概述
你可以让 lombok 生成一个 getter,它会在第一次调用时计算一次值,并从那时起缓存它。如果计算值需要大量 CPU 资源,或者该值占用大量内存,这将非常有用。要使用此功能,请创建一个 private final
变量,使用需要大量运行时间的表达式初始化它,并使用 @Getter(lazy=true)
注释您的字段。该字段将对代码的其余部分隐藏,并且该表达式将最多被评估一次,即在第一次调用 getter 时。没有神奇的标记值(即,即使您的昂贵计算的结果是 null
,结果也会被缓存),并且您的昂贵计算不需要是线程安全的,因为 lombok 会处理锁定。
如果初始化表达式很复杂,或者包含泛型,我们建议将代码移动到一个私有(如果可能的话是静态的)方法中,并调用该方法来代替。
使用 Lombok
import lombok.Getter;
|
原生 Java
public class GetterLazyExample {
|
支持的配置键
-
lombok.getter.lazy.flagUsage
= [warning
|error
] (默认值:未设置) - 如果配置了,Lombok 将把任何
@Getter(lazy=true)
的用法标记为警告或错误。
小字号声明
您永远不应该直接引用该字段,始终使用 lombok 生成的 getter,因为该字段的类型将被修改为 AtomicReference
。不要尝试直接访问此 AtomicReference
;如果它指向自身,则表示该值已被计算,并且为 null
。如果引用指向 null
,则表示该值尚未被计算。此行为在未来的版本中可能会更改。因此,始终使用生成的 getter 来访问您的字段!
即使您使用 doNotUseGetters=true
,诸如 @ToString
之类的其他 Lombok 注解也始终会调用 getter。