Функциональный интерфейс в Java
Функциональный интерфейс - интерфейс ровно с одним
абстрактным методом. Его можно реализовать обычным классом,
анонимным классом или лямбда-выражением. Методы default
и static на «единственность» не влияют: абстрактным
считается только метод без реализации.
Для модерации статей зададим контракт «проверить заголовок». Объявление интерфейса выглядит так:
interface TitleRule {
boolean ok(String title);
}
Аннотация @FunctionalInterface необязательна, но полезна:
компилятор проверит, что абстрактный метод один. Пометим
контракт явно:
@FunctionalInterface
interface TitleRule {
boolean ok(String title);
}
Если добавить второй абстрактный метод, проект с аннотацией
не соберётся. Реализацию через класс подключают словом
implements, как у любого интерфейса:
class MinLengthRule implements TitleRule {
private final int min;
MinLengthRule(int min) {
this.min = min;
}
@Override
public boolean ok(String title) {
return title.length() >= min;
}
}
Объявите @FunctionalInterface интерфейс TagRule
с методом boolean allowed(String tag). Реализуйте его
классом NotEmptyTagRule, который возвращает false
для пустой строки и true для непустой.