为什么此语法在使用 nashorn 创建 Java String 数组时不起作用

亚里士多德

在 Nashorn 中看到了New Java Array of Strings,并找到了解决方案。

但我只是想知道为什么我的原始代码会抛出异常:

var JStringArray = Java.type("java.lang.String[]");
var validExtensions = new JStringArray(".java", ".class", ".jar", ".xml");

例外是

Exception in thread "main" javax.script.ScriptException: TypeError: Can not create new object with constructor [Ljava.lang.String; with the passed arguments; they do not match any of its method signatures. in ~/scriptMonkey/js/samples/FileStatistics.js at line number 9
    at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:454)
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:406)
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402)
    at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
    at Debugger.main(Debugger.java:16)
Caused by: ~/scriptMonkey/js/samples/FileStatistics.js:9 TypeError: Can not create new object with constructor [Ljava.lang.String; with the passed arguments; they do not match any of its method signatures.
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172)
    at jdk.nashorn.internal.runtime.linker.NashornStaticClassLinker.checkNullConstructor(NashornStaticClassLinker.java:108)
    at jdk.nashorn.internal.runtime.linker.NashornStaticClassLinker.getGuardedInvocation(NashornStaticClassLinker.java:96)
    at jdk.internal.dynalink.support.CompositeTypeBasedGuardingDynamicLinker.getGuardedInvocation(CompositeTypeBasedGuardingDynamicLinker.java:176)
    at jdk.internal.dynalink.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:124)
    at jdk.internal.dynalink.support.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:154)
    at jdk.internal.dynalink.DynamicLinker.relink(DynamicLinker.java:253)
    at jdk.nashorn.internal.scripts.Script$1$FileStatistics.:program(~/scriptMonkey/js/samples/FileStatistics.js:9)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.internal.runtime.Context.evaluateSource(Context.java:1222)
    at jdk.nashorn.internal.runtime.Context.load(Context.java:839)
    at jdk.nashorn.internal.objects.Global.load(Global.java:1545)
    at jdk.nashorn.internal.scripts.Script$\^eval\_.:program(<eval>:1)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:449)
    ... 5 more
A. Sundararajan

对于 JStringArray 构造函数,您只能传递数组的元素数量。

var JStringArray = Java.type("java.lang.String[]");
var validExtensions = new JStringArray(4);
validExtensions[0] = ".java";
...

所有 Java 数组类型对象都是构造函数,它们接受作为数组“长度”的单个参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Java动态创建JSF commandButton时不起作用

用Java创建用户定义的错误;为什么此代码不起作用?

在Java中使用Nashorn?

为什么嵌套属性的验证在创建时不起作用?

使用java.swing渲染圆形按钮时出现问题。为什么此代码不起作用?

String.Format:为什么此代码不起作用?

为什么in_array在PHP中使用循环创建的数组上不起作用?

使用随机/数组生成的坐标创建画布线。不起作用,为什么?

为什么此常量声明在Java中不起作用?

如何从nashorn中创建一个Scala Seq [String]()?

使用createSpyObj创建间谍时,callThrough不起作用

使用<use>动态创建时,SVG <animate>不起作用

使用从文件创建的列表时,函数将不起作用

为什么使用javascript时此警报不起作用?

在Java中重载等于时,为什么使用Object以外的参数不起作用?

如何使用jjs参数启动Java nashorn

使用Java Nashorn引擎仅验证javascript

Nashorn使用CompiledScript进行Java脚本调试?

为什么 Devart 在尝试从数据库创建模型时不起作用?

为什么“ dd”在创建可启动USB时不起作用?

为什么我的手势识别器在我以编程方式创建时不起作用?

为什么此perl 6语法不起作用?

为什么此语法对于声明关联数组不起作用

为什么在 docker 镜像中创建的 .war 文件在浏览器中不起作用?(Java-Servlets, Tomcat, Docker)

Java-如何使用值创建String数组?

java:HashMap <String,int>不起作用

String to Float在Java中不起作用?

为什么需要使用Java Reflection创建数组元素

在 Greenplum/Postgresql 数据库上使用 java 驱动程序创建序列不起作用