[英]JSR223: Calling Java “varargs” methods from script
我有一個在Java上看起來像這樣的方法:
public void myMethod(Object... parms);
但是我無法從腳本中按預期方式調用此方法。
如果我用紅寶石做:
$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
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)
來減少混亂,尤其是對於其他語言。 有沒有更好的解決方法呢?
謝謝。
Java在內部將變長參數列表視為一個數組,其元素都屬於同一類型。 這就是為什么需要在JRuby腳本中提供對象數組的原因。
它是這樣的:
myMethod [42, 2009].to_java
to_java
方法從Ruby數組構造Java數組。 默認情況下,在這種情況下, to_java
根據需要構造Object數組。 如果您需要一個String數組,則可以使用
["a","b","c"].to_java(:string)
JRuby Wiki上的更多內容
看來這是jruby中的一個已知錯誤。 請參見Java對象上的方法分派/嘗試將參數 傳遞給定義為具有可變長度參數的Java方法時, 應嘗試找到匹配的varargs方法,並拋出NameError 。
根據鏈接,Rhino 支持vararg 。
可變參數由編譯器作為Object []處理,這是錯誤消息所描述的內容。
我沒有JRuby經驗,但是如果您有數組參數,是否可以使用?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.