NEW IN Lombok 0.10: Any field can be annotated with @Delegate
to let lombok generate delegate methods that forward the call
to this field.
Lombok delegates all public
methods of the field's type, as well as those of its supertype except for all methods declared
in java.lang.Object
.
You can pass any number of classes into the @Delegate
annotation's types
parameter.
If you do that, then lombok will delegate all public
methods in those types (and their supertypes, except
java.lang.Object
) instead of looking at the field's type.
All public non-Object methods that are part of the field's type (or, if you used types
parameter, the methods of those types) are
copied, whether or not you also wrote implementations for those methods. That would thus result in duplicate method errors. You can avoid these
by using the @Delegate(excludes=SomeType.class)
parameter to exclude all public methods in the excluded type(s), and their supertypes.
To have very precise control over what is delegated and what isn't, write private inner interfaces with method signatures, then specify these
private inner interfaces as types in @Delegate(types=PrivateInnerInterfaceWithIncludesList.class, excludes=SameForExcludes.class)
.
When passing classes to the annotation's types
or excludes
parameter, you cannot include generics.
This is a limitation of java. Use private inner interfaces or classes that extend the intended type including the
generics parameter to work around this problem.
When passing classes to the annotation, these classes do not need to be supertypes of the field. See the example.