From 045bc9a60d7d97985791ec80b8b423a49e5c1a7a Mon Sep 17 00:00:00 2001
From: Reinier Zwitserloot
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 provide a specific implementation for a method by providing you own implementation, lombok will not
- generate delegate methods for those already declared in the class.
+ in java.lang.Object
.
- You can pass any number of classes into the @Delegate
annotation. 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.
+ 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, these cannot contain generics. This is a limitation of java that lombok cannot work around.
+ 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.
-