2017-06-09 4 views
1
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 

答えて

1

ありませんクラス:

@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(); 
    } 

} 
+0

y私のソリューションは私にとってはうまくいくが、なぜナシューンのQuadPredicate版で動作するのだろうか? – Ajeetkumar

+0

@Ajeetkumar私は本当に伝えることができません、ナショーンを使用していません – Eugene

+1

@Ajeetkumar NashornはJavaScriptエンジンであり、JavaScriptは異なるルールを持つ別のプログラミング言語です... – Holger

関連する問題