«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.