Почему возникает ошибка "illegal start of expression"?
В пятой строке, которая начинается с Predicate<String>, возникает ошибка:
illegal start of expression
Вот мой код:
import java.util.function.Predicate;
public class Main implements Predicate{
public static void main(String[] args) {
Predicate<String> p1 = s -> return s != null;
p1.test("fgt");
}
}
Как исправить ошибку?
Ответы (1 шт):
Оператор 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;
}
}