Auslassen eines Setter / Getter in Lombok

231

Ich möchte eine Datenklasse in Lombok verwenden. Da es ungefähr ein Dutzend Felder hat, habe ich es mit Anmerkungen versehen @Data, um alle Setter und Getter zu generieren. Es gibt jedoch ein spezielles Feld, für das ich nicht möchte, dass die Accessoren implementiert werden.

Wie lässt Lombok dieses Feld aus?

DerMike
quelle

Antworten:

414

Sie können eine Zugriffsebene an die Anmerkungen @Getterund übergeben @Setter. Dies ist nützlich, um Getter oder Setter geschützt oder privat zu machen. Es kann auch verwendet werden, um die Standardeinstellung zu überschreiben.

Mit @Datahaben Sie standardmäßig öffentlichen Zugriff auf die Accessoren. Sie können jetzt die spezielle Zugriffsebene verwenden NONE, um den Accessor wie folgt vollständig wegzulassen:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;
Michael Piefel
quelle
1
Perfekt. Wenn das private Feld ein POJO ist und auch mit @Delegate () versehen ist, kann es zum Extrahieren einer Reihe von Eigenschaften in eine separate wiederverwendbare Klasse verwendet werden. Dies kann nützlich sein, wenn derselbe Satz von Eigenschaften auf mehrere Klassen angewendet wird (eine Art Mixin zum Hinzufügen von Eigenschaften). Zum Beispiel ein Mixin, das eine Reihe von Attributen darstellt, die für die Modellierung verschiedener XML-Elemente gelten können.
Xorcus
Haben Sie etwas Ähnliches wie das Auslassen eines Felds im Builder?
zt1983811
1
Sie meinen, das Attribut sollte nicht im Builder angezeigt werden? Nein, dafür gibt es nichts direktes. Denken Sie jedoch daran, dass @Builderdies sowohl für Funktionen und Konstruktoren als auch für Klassen gelten kann, und bieten Sie nur die Einstellung der Attribute an, die in der Signatur dieser Funktion enthalten sind.
Michael Piefel
Für diese Eigenschaft werden keine Setter und Getter implementiert, wobei @Data standardmäßig Setter und Getter enthält. was durch Erwähnung ausgeschlossen wäre AccessLevel.NONE.
Ram
41

Laut @ Data-Beschreibung können Sie Folgendes verwenden:

Alle generierten Getter und Setter werden öffentlich sein. Um die Zugriffsebene zu überschreiben, kommentieren Sie das Feld oder die Klasse mit einer expliziten Annotation @Setter und / oder @Getter. Sie können diese Annotation auch verwenden (indem Sie sie mit AccessLevel.NONE kombinieren), um das Generieren eines Getters und / oder Setters insgesamt zu unterdrücken.

Mark Rotteveel
quelle
-3

Wenn Sie Setter und Getter als privat haben, wird dies in PMD-Prüfungen angezeigt.

Arpit Sharma
quelle