Перейти к основному содержимому

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

· 2 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

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 .