#java
#java
Вопрос:
Есть ли проблема, если я создаю все static
методы public
в классе только с видимостью пакета? Я не хочу, чтобы методы были доступны вне пакета, если я не изменю видимость класса на общедоступную, и в этом случае я хочу, чтобы все они были видны без необходимости индивидуально делать их общедоступными.
Будет ли создание всех static
методов public
, не создавая класс public
, удовлетворять вышеуказанным требованиям?
Обновление / уточнение: в качестве пояснения, static
методы являются заводскими методами, поэтому я хочу, чтобы они были доступны всем, кто может видеть класс. Вот почему я хочу сохранить их максимальную видимость (вместо минимальной видимости, как обычно предлагается), чтобы они были видны всем, кто может видеть класс. И когда видимость класса расширяется, мне не нужно искать и находить статические методы, чтобы изменить их видимость. Я хочу один переключатель.
Комментарии:
1. Да, так и будет, почему бы просто не попробовать?
2. Разве это не довольно плохой стиль — использовать
public
и полагаться на другие механизмы для его защиты? Это определенно плохо для удобства чтения.3. @gexicide это работает, когда я пытаюсь это сделать; Я просто не хотел, чтобы были какие-либо ошибки.
4. @blafasel В качестве пояснения,
static
методы являются заводскими методами, поэтому я хочу, чтобы они были доступны всем, кто может видеть класс. Вот почему я хочу сохранить их максимальную видимость (вместо минимальной видимости, как обычно предлагается), чтобы они были видны всем, кто может видеть класс. И когда видимость класса расширяется, мне не нужно искать и находить статические методы, чтобы изменить их видимость. Я хочу один переключатель.
Ответ №1:
ДА. Это обычный вариант использования модификаторов доступа. Нет ничего плохого в том, чтобы иметь общедоступные методы в классе с видимостью пакета.
Однако «все» статические методы не обязательно должны быть общедоступными. Вы все равно должны использовать частные и защищенные методы для задач, которые являются внутренними / специфичными для реализации.
Идея состоит в том, чтобы сначала сохранить доступность как можно более минимальной, а затем предоставлять их при необходимости. Под «доступностью к минимуму» я подразумеваю только комбинированный эффект. Пока эффект одинаков, не имеет значения, как он достигается. Единственное другое соображение — это доработка … когда вы в конечном итоге сделаете этот класс общедоступным, вы хотите, чтобы эти методы были видны? Если да, вам лучше оставить методы общедоступными.
Обратите внимание, что для статических методов «эффект тот же». Однако для методов экземпляра подкласс сможет предоставить доступ к общедоступному методу в классе уровня пакета. Так что в этом случае эффект не будет таким же.
Комментарии:
1. 1 спасибо за подтверждение моей интуиции. Однако ваше последнее предложение / абзац, похоже, снова вызывает некоторые сомнения, потому что это заставляет меня думать, что, возможно, мне следует сохранить
static
пакет методов и создавать их ТОЛЬКОpublic
тогда, когда я создаю классpublic
(поэтому несколько изменений просто для его раскрытия). С другой стороны, ваш первый абзац, похоже, поощряет их сохранениеpublic
и просто создает класс с видимостью пакета, чтобы скрыть их.2. В качестве пояснения,
static
методы являются заводскими методами, поэтому я хочу, чтобы они были доступны любому, кто может видеть класс. Вот почему я хочу сохранить их максимальную видимость (вместо минимальной видимости, как говорится в вашем последнем пункте), чтобы они были видны всем, кто может видеть класс.3. Под «доступностью к минимуму» я имел в виду только комбинированный эффект. Пока эффект одинаков, не имеет значения, как он достигается. Единственное другое соображение — это доработка … когда вы в конечном итоге сделаете этот класс общедоступным, вы хотите, чтобы эти методы были видны? Если да, вам лучше оставить методы общедоступными.
4. Спасибо! Если бы вы могли немного прояснить это, я приму ваш ответ (просто отредактируйте ответ в свете моего редактирования вопроса, в котором я добавил «Обновление / уточнение:»).
Ответ №2:
В целом, как принцип проектирования, модификаторы доступа к любому методу или переменной экземпляра должны иметь одинаковую или узкую видимость (модификатор доступа).