我有一个在Java上看起来像这样的方法:
public void myMethod(Object... parms);但是我不能从脚本中像预期的那样调用这个方法。
如果,在ruby中,我这样做:
$myObject.myMethod(42);它给了我org.jruby.exceptions.RaiseException: could not coerce Fixnum to class [Ljava.lang.Object
如果我在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),让它不那么混乱,特别是在其他语言中。有没有更好的解决方法?
谢谢。
发布于 2009-10-16 11:10:52
Java在内部将可变长度参数列表作为一个数组对待,该数组的元素都是相同类型的。这就是为什么需要在JRuby脚本中提供对象数组的原因。
它是这样工作的:
myMethod [42, 2009].to_javato_java方法从一个Ruby数组构造一个Java数组。默认情况下,在这种情况下,to_java根据需要构造对象数组。如果需要字符串数组,可以使用
["a","b","c"].to_java(:string)有关这方面的更多信息,请访问JRuby wiki
发布于 2009-07-04 21:23:54
这似乎是jruby中的一个已知错误。参见method dispatch on Java objects / classes should try to find a matching varargs method和NameError thrown when trying to pass argument to a Java method that is defined as having variable length arguments。
根据链接Rhino做support vararg。
发布于 2009-07-04 22:20:35
Varargs由编译器作为Object[]处理,这就是错误消息所描述的。
我没有JRuby经验,但是如果你有一个数组参数,它能工作吗?
https://stackoverflow.com/questions/1082986
复制相似问题