首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSR223:从脚本调用Java "varargs“方法

JSR223:从脚本调用Java "varargs“方法
EN

Stack Overflow用户
提问于 2009-07-04 21:15:29
回答 3查看 1.4K关注 0票数 8

我有一个在Java上看起来像这样的方法:

代码语言:javascript
复制
public void myMethod(Object... parms);

但是我不能从脚本中像预期的那样调用这个方法。

如果,在ruby中,我这样做:

代码语言:javascript
复制
$myObject.myMethod(42);

它给了我org.jruby.exceptions.RaiseException: could not coerce Fixnum to class [Ljava.lang.Object

如果我在Javascript中尝试执行以下操作:

代码语言:javascript
复制
myObject.myMethod(42);

然后它会给我sun.org.mozilla.javascript.internal.EvaluatorException: Can't find method MyClass.test(number). (#2) in at line number 2

当然,如果我更改签名以获取一个单独的对象,那么它就可以工作。

我假设这是因为沿线的人不知道如何转换,比方说使用第一个位置的值将Integer转换为Integer[]

我相信像myMethod({42, 2009})这样的东西可以在Ruby中工作,但这看起来很丑陋--我只想做myMethod(42, 2009),让它不那么混乱,特别是在其他语言中。有没有更好的解决方法?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2009-10-16 11:10:52

Java在内部将可变长度参数列表作为一个数组对待,该数组的元素都是相同类型的。这就是为什么需要在JRuby脚本中提供对象数组的原因。

它是这样工作的:

代码语言:javascript
复制
myMethod [42, 2009].to_java

to_java方法从一个Ruby数组构造一个Java数组。默认情况下,在这种情况下,to_java根据需要构造对象数组。如果需要字符串数组,可以使用

代码语言:javascript
复制
["a","b","c"].to_java(:string)

有关这方面的更多信息,请访问JRuby wiki

票数 2
EN

Stack Overflow用户

发布于 2009-07-04 21:23:54

这似乎是jruby中的一个已知错误。参见method dispatch on Java objects / classes should try to find a matching varargs methodNameError thrown when trying to pass argument to a Java method that is defined as having variable length arguments

根据链接Rhino做support vararg

票数 1
EN

Stack Overflow用户

发布于 2009-07-04 22:20:35

Varargs由编译器作为Object[]处理,这就是错误消息所描述的。

我没有JRuby经验,但是如果你有一个数组参数,它能工作吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1082986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档