Annotation Type WithBy
Put on any field to make lombok build a 'withBy' - a withFieldNameBy method which produces a clone of this object (except for 1 field which gets a new value).
Complete documentation is found at the project lombok features page for @WithBy.
Example:
private @WithBy final int foo; private @WithBy final String bar;will generate:
public SELF_TYPE withFooBy(@lombok.NonNull IntUnaryOperator operator) { int foo = operator.apply(this.foo); return this.foo == foo ? this : new SELF_TYPE(foo, bar); } public SELF_TYPE withBarBy(@lombok.NonNull Function<? super String, ? extends String> operator) { String bar = operator.apply(this.bar); return this.bar == bar ? this : new SELF_TYPE(foo, bar); }
This annotation can also be applied to a class, in which case it'll be as if all non-static fields that don't already have
a WithBy
annotation have the annotation.
This annotation is primarily useful for hierarchical immutable data structures. For example:
class Movie { @WithBy private final Director director; } class Director { @WithBy private final LocalDate birthDate; }Using plain old
@With
, to increment a movie's director's birth date by one, you would write:
movie = movie.withDirector(movie.getDirector().withBirthDate(movie.getDirector().getBirthDate().plusDays(1)));but with
@WithBy
, you'd write:
movie = movie.withDirectorBy(d -> d.withBirthDateBy(bd -> bd.plusDays(1)));
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic @interface
Deprecated.Don't use this annotation, ever - Read the documentation. -
Optional Element Summary
Modifier and TypeOptional ElementDescriptionAny annotations listed here are put on the generated method.If you want your with method to be non-public, you can specify an alternate access level here.
-
Element Details
-
value
AccessLevel valueIf you want your with method to be non-public, you can specify an alternate access level here.- Returns:
- The method will be generated with this access modifier.
- Default:
PUBLIC
-
onMethod
WithBy.AnyAnnotation[] onMethodAny annotations listed here are put on the generated method. The syntax for this feature depends on JDK version (nothing we can do about that; it's to work around javac bugs).
up to JDK7:
@With(onMethod=@__({@AnnotationsGoHere}))
from JDK8:
@With(onMethod_={@AnnotationsGohere})
// note the underscore afteronMethod
.- Returns:
- List of annotations to apply to the generated method.
- Default:
{}
-