Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 此表达式的目标类型必须是扩展谓词的函数接口? 抽象类四谓词实现谓词{ 公共抽象布尔测试(最终T T、最终R R R、最终U U、最终V V); 公共布尔测试(对象t){ 抛出新的UnsupportedOperationException(); } }_Generics_Java 8_Predicate - Fatal编程技术网

Generics 此表达式的目标类型必须是扩展谓词的函数接口? 抽象类四谓词实现谓词{ 公共抽象布尔测试(最终T T、最终R R R、最终U U、最终V V); 公共布尔测试(对象t){ 抛出新的UnsupportedOperationException(); } }

Generics 此表达式的目标类型必须是扩展谓词的函数接口? 抽象类四谓词实现谓词{ 公共抽象布尔测试(最终T T、最终R R R、最终U U、最终V V); 公共布尔测试(对象t){ 抛出新的UnsupportedOperationException(); } },generics,java-8,predicate,Generics,Java 8,Predicate,为什么下面的语句告诉我这个表达式的目标类型必须是函数接口 四元谓词q=(字符串i,字符串j,字符串k,字符串l)->{返回i.equals(j);}; 但以下版本有效: QuadPredicate<String ,String , String ,String > q = (String i, String j, String k,String l) -> {return i.equals(j);}; 四谓词q= (四元谓词)新脚本EngineManager().getEn

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

四元谓词q=(字符串i,字符串j,字符串k,字符串l)->{返回i.equals(j);};
但以下版本有效:

QuadPredicate<String ,String , String ,String > q = (String i, String j, String k,String l) -> {return i.equals(j);};
四谓词q=
(四元谓词)新脚本EngineManager().getEngineByName(“nashorn”).eval(
“新的com.test.QuadPredicate(函数(obj,obj2,obj3,obj4)obj.equals(obj2))”;
System.out.println(“>>>”+q.test(“A”,“A”,null,null))//实现

应该是接口而不是类:

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
@functioninterface
接口四元谓词扩展谓词{
公共抽象布尔测试(最终T T、最终R R R、最终U U、最终V V);
@凌驾
默认布尔测试(T){
抛出新的UnsupportedOperationException();
}
}

您的解决方案适合我,但为什么它适用于我版本的nashorn QuadPredicate?@Ajeetkumar我真的说不出来,但没有使用过nashorn@AjeetkumarNashorn是一个JavaScript引擎,JavaScript是一种不同的编程语言,具有不同的规则……看起来Java正在原谅Nashorn返回的对象@
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
@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();
    }

}