Оператор return
нужно использовать при применении блока, когда есть какие-то вычисления (отдельная функция). В данном же случае, чтобы избавиться от ошибки, следовало написать:
Predicate<String> p1 = s -> { return s!= null; };
Однако выражение s != null
достаточно простое и возвращает булевский тип, поэтому конструкция с return
не нужна:
Predicate<String> p1 = s -> s!= null;
После разрешения первой ошибки с компиляцией сразу же проявится вторая о том, что класс Main
должен быть объявлен абстрактным, так как в нём нет реализации метода интерфейса test(Object)
:
/Main.java:3: error: Main is not abstract and does not override abstract method test(Object) in Predicate
public class Main implements Predicate {
^
1 error
Также появится предупреждение об использовании "сырого" типа Predicate
.
Либо целью класса не является реализация интерфейса и его нужно объявить просто:
public class Main {
// ...
}
либо объявить абстрактным:
public abstract class Main implements Predicate {
// ...
}
либо всё-таки реализовать требуемый метод:
public class Main implements Predicate {
public boolean test(Object obj) {
return null != obj;
}
}