@Delegate
不要丢失你的组合。
@Delegate
在 lombok v0.10 版本中作为功能引入(当时实验性包还不存在)。
它在 lombok v1.14 版本中被移至实验性包;主 lombok 包中的旧版本现已弃用。
实验性功能
实验性功能的原因:- 使用不多。
- 难以支持边缘情况,例如递归委托。
- API 相当不友好;如果可以简单地实现一些方法,并让
@Delegate
为你没有手动实现的任何内容生成委托,那就更好了,但是由于泛型擦除的问题,这也无法在没有注意事项的情况下实现。
概述
任何字段或无参数方法都可以使用 @Delegate
注解,以让 lombok 生成委托方法,将调用转发到该字段(或调用此方法的结果)。
Lombok 委托字段类型(或方法返回类型)的所有 public
方法,以及其超类型的方法,但 java.lang.Object
中声明的所有方法除外。
你可以将任意数量的类传递到 @Delegate
注解的 types
参数中。 如果这样做,lombok 将委托这些类型(及其超类型,但 java.lang.Object
除外)中的所有 public
方法,而不是查看字段/方法的类型。
所有属于计算类型一部分的公共非 Object
方法都会被复制,无论你是否也为这些方法编写了实现。 这将导致重复的方法错误。 你可以使用 @Delegate(excludes=SomeType.class)
参数来避免这些错误,以排除排除类型及其超类型中的所有公共方法。
为了非常精确地控制委托什么和不委托什么,请编写带有方法签名的私有内部接口,然后在 @Delegate(types=PrivateInnerInterfaceWithIncludesList.class, excludes=SameForExcludes.class)
中将这些私有内部接口指定为类型。
使用 Lombok
import java.util.ArrayList;
|
原生 Java
import java.util.ArrayList;
|
支持的配置键
-
lombok.delegate.flagUsage
= [warning
|error
] (默认值:未设置) - 如果配置了,Lombok 将把任何
@Delegate
的使用标记为警告或错误。
细则
当将类传递给注解的 types
或 excludes
参数时,你不能包含泛型。 这是 Java 的一个限制。 使用私有内部接口或扩展包含泛型参数的目标类型的类来解决此问题。
当将类传递给注解时,这些类不需要是字段的超类型。 请参阅示例。
@Delegate
不能用于静态字段或方法。
当要委托/排除的计算类型本身包含 @Delegate
注解时,不能使用 @Delegate
;换句话说,如果你尝试递归使用它,@Delegate
将会报错。