Может ли кто-то обобщить выбор видимости для интерфейсов Java? - PullRequest
1 голос
/ 18 мая 2009

У меня действительно два вопроса:

1) Когда вы будете использовать закрытый для пакета интерфейс?

2) Есть ли способ иметь открытый интерфейс, который закрыт для реализации вне его пакета?

Ответы [ 3 ]

5 голосов
/ 18 мая 2009

1) когда интерфейс нужен только в объеме вашего пакета. Например, интерфейс может сделать ваш код более читабельным, но вызывающим в пакете он не нужен.

2) Нет, это невозможно. См. ссылку для получения дополнительной информации. Интерфейс не определяет реализацию. Как вы могли бы закрыть его для реализации тогда?

2 голосов
/ 18 мая 2009

Пакетные частные интерфейсы полезны только в случаях, таких как реализации шаблона стратегии, когда есть несколько реализаций, которые вы можете использовать, но не хотите, чтобы мир знал о типах.

0 голосов
/ 18 мая 2009

1) У вас могут быть служебные методы, используемые несколькими классами в вашем пакете, которые никогда не должны вызываться извне. Или они могут понадобиться только одному классу, но этот класс настолько велик, что вы хотите переместить некоторые методы в другой класс для удобства обслуживания.

2) Мне бы пришлось попробовать (извините, я сейчас выбегаю из двери), но вы могли бы эффективно сделать это, объявив защищенный конструктор по умолчанию в интерфейсе.

...