Руководство по внутренним интерфейсам в Java

Руководство по внутренним интерфейсам в Java

1. Вступление

В этом коротком руководстве мы рассмотрим внутренние интерфейсы в Java. Они в основном используются для:

  • решение проблемы пространства имен, когда интерфейс имеет общее имя

  • увеличение инкапсуляции

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

Хорошо известным примером является интерфейсEntry, который объявлен внутри интерфейсаMap. Определенный таким образом интерфейс не входит в глобальную область видимости и обозначается какMap.Entry, что отличает его от других интерфейсовEntry и делает его связь сMap очевидной.

2. Внутренние Интерфейсы

По определению, объявление внутреннего интерфейса происходит в теле другого интерфейса или класса.

Они неявно являются общедоступными и статическими, а также их поля при объявлении в другом интерфейсе (аналогично объявлениям полей в интерфейсах верхнего уровня), и их можно реализовать где угодно:

public interface Customer {
    // ...
    interface List {
        // ...
    }
}

Inner interfaces declared within another class are also static, но они могут иметь спецификаторы доступа, которые могут ограничивать, где они могут быть реализованы:

public class Customer {
    public interface List {
        void add(Customer customer);
        String getCustomerNames();
    }
    // ...
}

В приведенном выше примере у нас есть интерфейсList, который будет служить для объявления некоторых операций в спискеCustomers, таких как добавление новых, получение представленияString и так далее.

List - распространенное имя, и для работы с другими библиотеками, определяющими этот интерфейс, нам нужно разделить наше объявление, то естьnamespace it.

Здесь мы используем внутренний интерфейс, если не хотим использовать новое имя, напримерCustomerList..

Мы также сохранили два связанных интерфейса, что улучшает инкапсуляцию.

Наконец, мы можем продолжить реализацию этого:

public class CommaSeparatedCustomers implements Customer.List {
    // ...
}

3. Заключение

Мы быстро взглянули на внутренние интерфейсы в Java.

Как всегда, образцы кода можно найтиover on GitHub.