You can annotate any field with @Getter and/or @Setter, to let lombok generate the default getter/setter automatically.
A default getter simply returns the field, and is named getFoo if the field is called foo (or isFoo
if the field's type is boolean). A default setter is named setFoo if the field is called foo, returns void,
and takes 1 parameter of the same type as the field. It simply sets the field to this value.
The generated getter/setter method will be public unless you explicitly specify an AccessLevel, as shown in the example below.
Legal access levels are PUBLIC, PROTECTED, PACKAGE, and PRIVATE.
You can also put a @Getter and/or @Setter annotation on a class. In that case, it's as if you annotate all the non-static fields in that
class with the annotation.
You can always manually disable getter/setter generation for any field by using the special AccessLevel.NONE access level. This lets you override the
behaviour of a @Getter, @Setter or @Data annotation on a class.
To put annotations on the generated method, you can use onMethod=@_({@AnnotationsHere}); to put annotations on the only parameter of a generated setter method, you can use onParam=@_({@AnnotationsHere}). Be careful though! This is an experimental feature. For more details see the documentation on the onX feature.
For generating the method names, the first character of the field, if it is a lowercase character, is title-cased, otherwise, it is left unmodified. Then, get/set/is is prefixed.
No method is generated if any method already exists with the same name (case insensitive) and same parameter count. For example, getFoo()
will not be generated if there's already a method getFoo(String... x) even though it is technically possible to make the method. This caveat
exists to prevent confusion. If the generation of a method is skipped for this reason, a warning is emitted instead. Varargs count as 0 to N parameters.
For boolean fields that start with is immediately followed by a title-case letter, nothing is prefixed to generate the getter name.
Any variation on boolean will not result in using the is prefix instead of the get prefix; for example,
returning java.lang.Boolean results in a get prefix, not an is prefix.
Any annotations named @NonNull (case insensitive) on the field are interpreted as: This field must not ever hold
null. Therefore, these annotations result in an explicit null check in the generated setter. Also, these
annotations (as well as any annotation named @Nullable or @CheckForNull) are copied to setter parameter and getter method.
You can annotate a class with a @Getter or @Setter annotation. Doing so is equivalent to annotating all non-static fields
in that class with that annotation. @Getter/@Setter annotations on fields take precedence over the ones on classes.
Using the AccessLevel.NONE access level simply generates nothing. It's useful only in combination with
@Data or a class-wide @Getter or @Setter.
@Getter can also be used on enums. @Setter can't, not for a technical reason, but
for a pragmatic one: Setters on enums are an extremely bad idea.