2016-06-15 8 views
3

Как я знаю, когда я отмечаю класс с аннотацией , Ломбок предоставит геттеры для всех полей, сеттеры для всех нефинальных полей. Я хочу отключить getter и setter только для одного экземпляра нефинального поля, как я могу достичь этого?Как отключить приемник/сеттер только для одного экземпляра нефинального поля? [Project Lombok]

Что я ожидал? Для того, чтобы найти аннотацию как

@Setter(provide=false) 
@Getter(provide=false) 
private Map<...> dialogs; 

или

@Data(excludeFields={"dialogs"}) 

Я гугле много и искал на официальном сайте, но я не нашел ничего.
Ваша помощь будет оценена по достоинству. Спасибо.

ответ

2

Я не знаю, как предотвратить генерацию Getter/Setter для определенного поля, однако есть трюк, делающий аксессоры невидимыми вне класса.

@Data 
public class Person { 
    private String name; 
    private int age; 
    @Getter(AccessLevel.PRIVATE) @Setter(AccessLevel.PRIVATE) 
    private Map<String, String> dialog; 
} 

С AccessLevel.PRIVATE геттерирующий/Присваиватель dialog не будет виден за пределами класса, что подобный эффект, что класс не имеет аксессоров для поля.

РЕДАКТИРОВАТЬ:

Как упоминалось @Roel_Spilker, Существует способ, чтобы отключить геттер/сеттер поколения. webpage for Getter/Setter говорит:

Вы всегда можете вручную отключить геттер/сеттер поколение для любого поля с помощью специального AccessLevel.NONE уровня доступа. Это позволяет вам переопределить поведение аннотации @Getter, @Setter или @Data.

Таким образом, вы должны использовать @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) вместо того, чтобы сделать их частными.

+0

Я также нашел этот способ несколько секунд назад, но они будут сгенерированы одинаково :( – Andrew

+0

другой способ маркирует все поля этими аннотациями, кроме тех, которые не нуждаются в методах, но это приведет к многому написанию дублированного кода. Спасибо :) – Andrew

4

Вы можете использовать @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) на поле, как описано в the website.

Раскрытие информации: Я являюсь разработчиком Lombok.