2016-07-08 27 views
0

Wie erstellt man ein Prädikat von ScriptEngine in Java 8 und zurück zu Java-Programm?Erstellen und Zurücksenden von Prädikat <T> von mit Nashorn-Engine Java 8

Prädikatsbedingungen sind Operatoren und ihre Vergleichswerte und sind in der Anzahl gut. Also wollte ich wie unter das Prädikat von JavaScript-Engine, etwas zu bekommen:

public Predicate<Object> getPredicate(String operator, String value) { 
return Predicate<Object> engine.eval("(i)-> i" + operator + value); 
} 

hier Operator kann sein> =, < =,>, < usw. dies ist nur eine einfachere Version des eigentlichen Problems. Wie kann ich Prädikate von Nashorn erstellen, kann ich danach fahren.

Antwort

0

Diese Arbeit sollte:

engine.eval("new java.util.Predicate(function(i) { return i" + operator + value + ";})"); 

Außerdem glaube ich, in Ihrem ursprünglichen Beitrag, den Sie nicht "value" zitieren wollten.

1

Ich denke über so etwas wie diese:

public Predicate<Object> getPredicate(final String operator, final String value) { 
    return i -> { 
    Bindings bindings = new Bindings(); 
    bin.put("i", i); 
    bin.put("value", value); 
    return engine.eval("i " + operator + " value", bindings); 
    }; 
} 
+0

Es heißt "Kann den Typ Bindungen nicht instanziieren" für neue Bindungen() – Ajeetkumar