这个表达式的目标类型必须是扩展谓词的功能接口?

The target type of this expression must be a functional interface for extended Predicate?

abstract class QuadPredicate<T,R, U,V> implements Predicate<T> {

    public abstract boolean test(final T t, final R r, final U u,final V v );

    public boolean test(Object t) {
            throw new UnsupportedOperationException();
    }

}

为什么下面的语句给我这个表达式的目标类型必须是函数式接口

QuadPredicate<String ,String , String ,String > q = (String i, String j, String k,String l) -> {return i.equals(j);};

但以下版本有效:

QuadPredicate<Object ,Object , String ,String > q = 
                (QuadPredicate<Object, Object, String,String>)new ScriptEngineManager().getEngineByName("nashorn").eval(
                "new com.test.QuadPredicate(function(obj, obj2, obj3,obj4) obj.equals(obj2))");

System.out.println(">>>>" + q.test("A", "A", null, null)); //gives true

那应该是一个接口,而不是class:

@FunctionalInterface
interface QuadPredicate<T, R, U, V> extends Predicate<T> {

    public abstract boolean test(final T t, final R r, final U u, final V v);

    @Override
    default boolean test(T t) {
        throw new UnsupportedOperationException();
    }

}