簡體   English   中英

JSR223:從腳本調用Java“ varargs”方法

[英]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

當然,如果我將簽名更改為僅包含一個對象,那么它將起作用。

我認為這是因為沿途有人不知道如何轉換,比如說IntegerInteger[]的值在第一個位置。

我相信像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上的更多內容

可變參數由編譯器作為Object []處理,這是錯誤消息所描述的內容。

我沒有JRuby經驗,但是如果您有數組參數,是否可以使用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM