Почему возникает ошибка "illegal start of expression"?

Рейтинг: 0Ответов: 1Опубликовано: 19.02.2023

В пятой строке, которая начинается с 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");
    }
}

Как исправить ошибку?

Ответы

▲ 3

Оператор 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;
    }
}