import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Example { public static void main(String[] args) { try { // Vnanoのスクリプトエンジンを検索して取得 ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("vnano"); // フィールドとメソッドを外部変数・外部関数として接続 engine.put("LOOP_MAX", Example.class.getField("LOOP_MAX")); engine.put("output", Example.class.getMethod("output", int.class)); // スクリプト処理を実行 engine.eval( " int sum = 0; " + " for (int i=1; i<=LOOP_MAX; i++) { " + " sum += i; " + " } " + " output(sum); " ); } catch (ScriptException|NoSuchFieldException|NoSuchMethodException e) { System.out.println("リフレクション/スクリプト実行でエラー発生"); e.printStackTrace(); } } // スクリプト内からアクセスするフィールドとメソッド public static int LOOP_MAX = 100; public static void output(int n) { System.out.println("スクリプトからの出力: " + n); } }