@Accessors was introduced as experimental feature in lombok v0.11.0.
Experimental because:
The @Accessors
annotation is used to configure how lombok generates and looks for getters and setters.
By default, lombok follows the bean specification for getters and setters: The getter for a field named pepper
is getPepper
for example. However, some might like to break with the bean specification in order to end up with
nicer looking APIs. @Accessors
lets you do this.
Some programmers like to use a prefix for their fields, i.e. they write fPepper
instead of pepper
.
We strongly discourage doing this, as you can't unit test the validity of your prefixes, and refactor scripts may turn fields
into local variables or method names. Furthermore, your tools (such as your editor) can take care of rendering the identifier in a
certain way if you want this information to be instantly visible. Nevertheless, you can list the prefixes that your project uses via
@Accessors
as well.
@Accessors
therefore has 3 options:
fluent
- A boolean. If true, the getter for pepper
is just pepper()
, and the
setter is pepper(T newValue)
. Furthermore, unless specified, chain
defaults to true.chain
- A boolean. If true, generated setters return this
instead of void
.fluent=true
, then Default: true.prefix
- A list of strings. If present, fields must be prefixed with any of these prefixes. Each field name is
compared to each prefix in the list in turn, and if a match is found, the prefix is stripped out to create the base name for
the field. It is legal to include an empty string in the list, which will always match. For characters which are letters, the
character following the prefix must not be a lowercase letter, i.e. pepper
is not a match even to prefix p
,
but pEpper
would be (and would mean the base name of this field is epper
).
The @Accessors
annotation is legal on types and fields; the annotation that applies is the one on the field if present,
otherwise the one on the class. When a @Accessors
annotation on a field is present, any @Accessors
annotation
also present on that field's type is ignored.
lombok.accessors.chain
= [true
| false
] (default: false)true
, any class that either doesn't have an @Accessors
annotation, or it does, but that annotation does not have an explicit value for the chain
parameter, will act as if @Accessors(chain = true)
is present.lombok.accessors.fluent
= [true
| false
] (default: false)true
, any class that either doesn't have an @Accessors
annotation, or it does, but that annotation does not have an explicit value for the fluent
parameter, will act as if @Accessors(fluent = true)
is present.lombok.accessors.prefix
+= a field prefix (default: empty list)+=
operator. Inherited prefixes from parent config files can be removed with the -=
operator. Any class that either doesn't have an @Accessors
annotation, or it does, but that annotation does not have an explicit value for the prefix
parameter, will act as if @Accessors(prefix = {prefixes listed in configuration})
is present.lombok.accessors.flagUsage
= [warning
| error
] (default: not set)@Accessors
as a warning or error if configured.
The nearest @Accessors
annotation is also used for the various methods in lombok that look for getters, such as
@EqualsAndHashCode
.
If a prefix list is provided and a field does not start with one of them, that field is skipped entirely by lombok, and a warning will be generated.