Почему возникает ошибка "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 шт):

Автор решения: Nowhere Man

Оператор 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;
    }
}
→ Ссылка