Ломбок: Разве защищенные сеттеры не должны быть доступны не подклассам? - PullRequest
0 голосов
/ 18 марта 2020

Я новичок в lombok и смущен тем, что следующий код компилируется без ошибок. Поскольку я указал для Setter значение AccessLevel.PROTECTED, не должно ли быть каких-либо ошибок компиляции?

AnotherClass. java

@NoArgsConstructor
@AllArgsConstructor
public class AnotherClass {

    @Getter @Setter
    private int width;

    @Getter(AccessLevel.PUBLIC) @Setter(AccessLevel.PROTECTED)
    private int height;

    @Getter @Setter @NonNull
    private String name;
}

Main. java

public static void main(String[] args) {
    AnotherClass instance1 = new AnotherClass(2, 1, "instance1");
    System.out.println("Fetching height of instance1: " + instance1.getHeight());
    instance1.setHeight(3);
    System.out.println("Fetching height of instance1: " + instance1.getHeight());
}

вывод:

Fetching height of instance1: 1
Fetching height of instance1: 3

1 Ответ

2 голосов
/ 18 марта 2020

Вы можете использовать delombok, чтобы убедиться, что сгенерированные сеттеры действительно «защищены». Как отмечается в комментариях, уровни доступа java - строгое восхождение; каждый более разрешающий уровень включает в себя весь доступ «под ним». Таким образом:

  • private = Больше или меньше: весь код в этом файле.
  • Ничего (пакет приватный) = Весь private + весь исходный код в одном пакете .
  • protected = все вышеперечисленные + подклассы, даже в другом пакете.
  • public = все.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я разработчик Lombok.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...