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();
}
// ...
}
В приведенном выше примере у нас есть интерфейс списка
, который будет служить для объявления некоторых операций со списком клиентов
, таких как добавление новых, получение строкового
представления и так далее.
Список
является распространенным именем, и для работы с другими библиотеками, определяющими этот интерфейс, нам нужно отделить наше объявление, т . е. пространство имен
.
Здесь мы используем внутренний интерфейс, если не хотим использовать новое имя, такое как CustomerList.
Мы также сохранили вместе два связанных интерфейса, что улучшает инкапсуляцию.
Наконец, мы можем продолжить его реализацию:
public class CommaSeparatedCustomers implements Customer.List {
// ...
}
3. Заключение
Мы быстро рассмотрели внутренние интерфейсы в Java.
Как всегда, образцы кода можно найти на GitHub .