Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Геттеры и сеттеры для статических полей

#java


Вопрос, возможно, глупый, но всё же... Нужны ли геттеры и сеттеры для статических
полей, или их лучше объявлять public?

Т.е, какой из вариантов лучше?

1 вариант:

public abstract class SomeClass {
    public static boolean isReadOnly = false;
}


и далее использовать SomeClass.isReadOnly = true;

2 вариант:

public abstract class SomeClass {
    private static boolean isReadOnly = false;

    public static boolean isReadOnly() {
        return isReadOnly;
    }

    public static void setReadOnly(boolean isReadOnly) {
        SomeClass.isReadOnly = isReadOnly;
    }
}


и далее использовать SomeClass.setReadOnly(true);
    


Ответы

Ответ 1



Область видимости поля нужно определять исходя из того, где оно будет использовано. (ваш К.О.) В вашем случае с примитивным типом никакой разницы нет. Вы в обоих вариантах позволяете модифицировать переменную. Если, к примеру, вам нужны какие-то дополнительные проверки при записи, тогда имеет смысл использовать приватное поле и сеттер. Или если у вас поле-объект и вы не хотите давать ссылку на него напрямую (как в случае с public), тогда имеет смысл использовать приватное поле и геттер, который возвращает копию объекта.

Ответ 2



Добавлю к уже сказанному. Геттеры и сеттеры позволяют более гибко избавиться от поля вообще, не меняя внешний API. То есть, вызываться будет сеттер, но он уже не будет сетить в поле и поля уже не будет, а будет какая-то другая логика. А вообще, советую почитать книгу Джошуа Блоха Effective Java.

Комментариев нет:

Отправить комментарий