问题描述
这是我带有类的简单Java脚本test.js:
class Car {
constructor(name,year) {
this.name = name;
this.year = year;
}
}
myCar = new Car("Ford",2014);
Print("done")
这是我的Java代码,它将尝试加载test.js
public class Controller {
public static void main(String[] args) {
try {
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("--language=es6");
engine.eval(Files.newBufferedReader(Paths.get("<Path-to-test-js>/test.js"),StandardCharsets.UTF_8));
} catch (Exception _e){
System.out.println(_e);
}
}
但抛出异常:
javax.script.ScriptException: <eval>:1:0 Expected an operand but found class
class Car {
^ in <eval> at line number 1 at column number 0
为什么在这里抛出异常。
解决方法
我无法用我的脚本运行 nashorn,我认为不支持类。 如果有人打算使用 nashorn,请不要使用它:
- 我从脚本中删除了类并测试了它的性能,它非常慢。甚至还没有接近我的应用程序的预期性能。
- 即使出于学习目的,我也不会推荐它,因为它变得绝对。 Nashorn 是 OpenJDK 中的 JavaScript 引擎,它已在 JDK 11 中被 JEP 335 弃用,最近计划在 JEP 372 的未来 JDK 版本中移除。