From 10e80025fc0883c5660b2b7ac2ec368bf38d0736 Mon Sep 17 00:00:00 2001 From: Benjamin Winterberg Date: Tue, 13 Jan 2015 15:43:27 +0100 Subject: [PATCH] Add another nashorn sample of dynamically invoking java code at runtime --- src/com/winterbe/java8/Nashorn7.java | 43 ++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/com/winterbe/java8/Nashorn7.java diff --git a/src/com/winterbe/java8/Nashorn7.java b/src/com/winterbe/java8/Nashorn7.java new file mode 100644 index 0000000..c753dbc --- /dev/null +++ b/src/com/winterbe/java8/Nashorn7.java @@ -0,0 +1,43 @@ +package com.winterbe.java8; + +import javax.script.Invocable; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; + +/** + * @author Benjamin Winterberg + */ +public class Nashorn7 { + + public static class Person { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getLengthOfName() { + return name.length(); + } + } + + public static void main(String[] args) throws ScriptException, NoSuchMethodException { + ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); + engine.eval("function foo(predicate, obj) { return !!(eval(predicate)); };"); + + Invocable invocable = (Invocable) engine; + + Person person = new Person(); + person.setName("Hans"); + + String predicate = "obj.getLengthOfName() >= 4"; + Object result = invocable.invokeFunction("foo", predicate, person); + System.out.println(result); + } + +} -- GitLab