Как объявить интерфейс в Java, методы которого принимают и возвращают значения?

«Как объявить интерфейс в Java, методы которого принимают и возвращают значения?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Интерфейс объявляет контракт, который реализующие его классы должны выполнить. Методы интерфейса по умолчанию являются public abstract и могут иметь параметры и возвращаемый тип.

Пример базового интерфейса:

// Функциональный интерфейс с одним абстрактным методом
@FunctionalInterface
interface StringProcessor {
    // Абстрактный метод, принимающий и возвращающий значение
    String process(String input);
}

Начиная с Java 8, интерфейсы также могут содержать:

  • Default методы (реализация по умолчанию):
    default String toUpperCase(String input) {
        return input.toUpperCase();
    }
  • Static методы (принадлежат интерфейсу):
    static boolean isEmpty(String str) {
        return str == null || str.trim().isEmpty();
    }

Использование (лямбда-выражение):

StringProcessor reverser = (str) -> new StringBuilder(str).reverse().toString();
String result = reverser.process("Hello"); // Вернет "olleH"

Ключевые моменты:

  • Класс, реализующий интерфейс, обязан предоставить реализацию всех его абстрактных методов.
  • Аннотация @FunctionalInterface гарантирует, что интерфейс имеет ровно один абстрактный метод, что позволяет использовать его с лямбда-выражениями.