gpt4 book ai didi

java Nashorn ReferenceError

转载 作者:行者123 更新时间:2023-11-29 04:24:23 26 4
gpt4 key购买 nike

我正在使用 nashorn 进行一些体验。

为此,我在 java 中编写了这个简单的代码,我想在其中使用我定义的自定义对象。

       ScriptEngine engine = new 
ScriptEngineManager().getEngineByName("javascript");
System.out.println("engine = " + engine.getClass().getName().toString());

engine.put("id", "2");
System.out.println("id = " + engine.eval("id"));

Object person = engine.eval("importClass(Data.com.personal.Person)");

我返回以下错误:

        Exception in thread "main" javax.script.ScriptException: ReferenceError: "importClass" is not defined in <eval> at line number 1

现在我用谷歌搜索,他们说要使用:

     load("nashorn:mozilla_compat.js");

但是我对放置(或如何使用)这个加载函数的位置有点困惑?


更新

要使用 nashorn 导入类工作,必须像这样进行调用:

    engine.eval("importClass(com.personal.Person)");

出于某种原因,这对我来说并不明显 :P

最佳答案

使用 Nashorn,你应该使用:

var MyJavaClass = Java.type('my.package.MyJavaClass');

现在您可以使用您的自定义 Java 类了。

有关更多信息,请参阅这个很好的介绍:http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/

完整示例:

public final class NashornTest {

// Class can even be inner class. Must be public however!
public static class MyData {

private int id;
private String name;

public MyData(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return String.format("MyData[%d, %s]", id, name);
}

}

@Test
public void test() throws ScriptException {
final ScriptEngineManager sem = new ScriptEngineManager();
final ScriptEngine se = sem.getEngineByName("javascript");

Object obj = se.eval(
"var MyJavaData = Java.type('test.el.NashornTest$MyData');" +
"new MyJavaData(42, 'The usual number');");

// prints MyData[42, The usual number]
System.out.println(obj);
}

}

关于java Nashorn ReferenceError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47162009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com