mmmjjkx

管理成员
管理员
版主
UID
2
2024-01-28
29
23
112
勋章
4
金粒
12,710金粒
钻石
0钻石
嗨币
5.0嗨币
Nashorn是一个java的js引擎,但是他在jdk8以后的版本被剥离了出来,但你可以在Maven Central导入:
XML:
<dependency>
    <groupId>org.openjdk.nashorn</groupId>
    <artifactId>nashorn-core</artifactId>
    <version>15.4</version>
    <scope>provided</scope>
</dependency>

获取Nashorn的ScriptEngine:
Java:
ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine();

在JS中引用Java:
JavaScript:
var Math = Java.type("java.lang.Math"); //引用Java类
var PI = Math.PI; //可以直接引用Math类的PI字段
///////////////
var intArray = Java.type("int[]"); //int数组
var theIntArray = new intArray(100); //创建一个int数组
///////////////
var String = Java.type("java.lang.String"); //字符串类
var exampleString = new String("114514"); //创建字符串

exampleString.toUpperCase(); //引用Java字符串类的方法
///////////////
var Run = Java.type("java.lang.Runnable");
var MyRun = Java.extend(Run, {
    run: function() {
        print("Run in separate thread");
    }
}); //继承Runnable,重写run方法
var Thread = Java.type("java.lang.Thread");
var th = new Thread(new MyRun()); //创建线程

更多详情请看:
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/shell.html

注意事项
Nashorn仅支持到ECMAScript 5.1,且let, const可能无法正常使用,如需替代品,你可以使用GraalJS
 
最后编辑: