Javet — это Java + V8 (JAVa + V + EighT). Это отличный способ встраивания Node.js и V8 в Java.
Начиная с версии 0.9.8, Javet позволяет вводить произвольные объекты Java в V8, что обеспечивает полное взаимодействие между Java и JavaScript. Чтобы включить эту функцию, приложению достаточно вызвать v8Runtime.setConverter(new JavetProxyConverter());. Вот 3 примера.
Внедрить статический класс
v8Runtime.getGlobalObject().set("System", System.class); v8Runtime.getExecutor("function main() {\n" + // Java reference can be directly called in JavaScript. " System.out.println('Hello from Java');\n" + // Java reference can be directly assigned to JavaScript variable. " const println = System.out.println;\n" + // Java reference can be directly assigned to JavaScript variable. " println('Hello from JavaScript');\n" + "}\n" + "main();").executeVoid(); v8Runtime.getGlobalObject().delete("System"); /* * Output: * Hello from Java * Hello from JavaScript */
Внедрить перечисление
v8Runtime.getGlobalObject().set("Color", Color.class); System.out.println(v8Runtime.getExecutor("Color.pink.toString();").executeString()); System.out.println("The enum in JavaScript is the one in Java: " + (Color.pink == (Color) v8Runtime.getExecutor("Color.pink;").executeObject())); v8Runtime.getGlobalObject().delete("Color"); /* * Output: * java.awt.Color[r=255,g=175,b=175] * The enum in JavaScript is the one in Java: true */
Внедрить шаблон
Pattern pattern = Pattern.compile("^\\d+$"); v8Runtime.getExecutor("function main(pattern) {\n" + " return [\n" + " pattern.matcher('123').matches(),\n" + " pattern.matcher('abc').matches(),\n" + " ];\n" + "}").executeVoid(); System.out.println(v8Runtime.getGlobalObject().invokeObject("main", pattern).toString()); /* * Output: * [true, false] */
Внедрить StringBuilder
v8Runtime.getGlobalObject().set("StringBuilder", StringBuilder.class); System.out.println(v8Runtime.getExecutor("function main() {\n" + " return new StringBuilder('Hello').append(' from StringBuilder').toString();\n" + "}\n" + "main();").executeString()); v8Runtime.getGlobalObject().delete("StringBuilder"); /* * Output: * Hello from StringBuilder */