Публичные члены в частном классе пакета

#java

#java #ооп #стиль кодирования

Вопрос:

Интересно, нормально ли (не считается плохой практикой) иметь общедоступные члены в частном классе пакета. Я обычно добавляю public ключевое слово к элементам моих классов видимости по умолчанию, чтобы указать, что такие элементы являются частью classes API.

Я делаю это только для удобства чтения, поскольку в этом случае публичные члены имеют по существу ту же видимость, что и члены без каких-либо модификаторов доступа (т. Е. видимость пакета). Это правильно?

Пример:

 class ModuleImplementationClass {
    private int fieldA;
    private String fieldB;

    private void someClassInternalMethod() {
         // impl
    }

    public int doSth() {
        // method that will be called by other classes in the package
    }
}
  

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

1. Бах, лучший выбор — быть последовательным.

2. Иногда этого невозможно избежать. Реализованные методы интерфейса должны быть общедоступными.

Ответ №1:

Я делаю это только для удобства чтения, поскольку в этом случае публичные члены имеют по существу ту же видимость, что и члены без каких-либо модификаторов доступа (т. Е. видимость пакета). Это правильно?

Ну, это зависит. Нет, если вы переопределяете существующие методы (например, toString() ) или реализуете интерфейс.

Если вы не хотите, чтобы метод использовался извне пакета, сделайте его закрытым для пакета. Если вы хотите, чтобы он использовался откуда угодно, сделайте его общедоступным. Или другой способ подумать об этом: создайте свой доступ к методу так, чтобы, если кто-то изменил только доступ к классу, чтобы сделать его общедоступным классом, вы не захотели бы изменять доступ к методу тоже.

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

1. «Разработайте свой доступ к методу так, чтобы, если кто-то изменил только доступ к классу, чтобы сделать его общедоступным классом, вы не захотели бы изменять доступ к методу тоже». Я думаю, что это именно то, что я делаю, но просто не мог сознательно выразить. Спасибо!