Вопрос касается контекста назначения функционального интерфейса-
Predicate<String> p = String::isEmpty;
Отлично работает, когда объявление метода isEmpty
в классе String - public boolean isEmpty(){}
.
Если я попытаюсь объявить то же самое в пользовательском классе, например -
class Test{
public boolean isEmpty(){
...
}
}
И сделать такое же задание -
Predicate<String> p = Test::isEmpty;
Это будет ошибка компиляции -
Тип Test не определяет isEmpty(String), который применим здесь.
И Predicate<T>
представляет собой предикат (логическую функцию) одного аргумента, а функциональный метод - boolean test(T t){}
.
Любое объяснение? И я что-то пропустил?