1. введение
В этом коротком уроке мы рассмотрим внутренние интерфейсы в Java. Они в основном используются для:
- решение проблемы с пространством имен, когда интерфейс имеет общее имя
- увеличение инкапсуляции
- повышение удобочитаемости за счет группировки связанных интерфейсов в одном месте
Хорошо известным примером является интерфейс Entry , который объявлен внутри интерфейса Map . Определенный таким образом, интерфейс не находится в глобальной области, и на него ссылаются как на Map.Entry , отличая его от других Entry интерфейсов и делая его связь с Map очевидной.
2. Внутренние Интерфейсы
По определению, объявление внутреннего интерфейса происходит в теле другого интерфейса или класса.
Они неявно являются общедоступными и статическими, а также их поля, объявленные в другом интерфейсе ( аналогично объявлениям полей в интерфейсах верхнего уровня), и они могут быть реализованы в любом месте:
public interface Customer { // ... interface List { // ... } }
Внутренние интерфейсы , объявленные в другом классе, также являются статическими , но они могут иметь спецификаторы доступа, которые могут ограничивать, где они могут быть реализованы:
public class Customer { public interface List { void add(Customer customer); String getCustomerNames(); } // ... }
В приведенном выше примере у нас есть интерфейс List , который будет служить для объявления некоторых операций над списком Клиентов , таких как добавление новых, получение представления String и так далее.
List является распространенным именем, и для работы с другими библиотеками, определяющими этот интерфейс, нам необходимо отделить наше объявление, т. Е. пространство имен it.
Здесь мы используем внутренний интерфейс, если не хотим использовать новое имя, например Список клиентов.
Мы также сохранили два связанных интерфейса вместе, что улучшает инкапсуляцию.
Наконец, мы можем продолжить его реализацию:
public class CommaSeparatedCustomers implements Customer.List { // ... }
3. Заключение
Мы быстро рассмотрели внутренние интерфейсы в Java.
Как всегда, примеры кода можно найти на GitHub .