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.
-