8

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

もちろん、署名を変更して 1 つのオブジェクトを取得すると、機能します。

これは、最初の位置にある値をInteger使用して変換する方法を知らない人がいるからだと思います。Integer[]

私はmyMethod({42, 2009})Rubyでうまくいくと信じていますが、これは醜いようmyMethod(42, 2009)です. これに対するより良い回避策はありますか?

ありがとう。

4

3 に答える 3

2

Java は、可変長の引数リストを、要素がすべて同じ型の配列として内部的に扱います。これが、JRuby スクリプトでオブジェクトの配列を提供する必要がある理由です。

それはこのように動作します:

myMethod [42, 2009].to_java

このto_javaメソッドは、Ruby 配列から Java 配列を構築します。デフォルトでto_javaは、この場合、必要に応じて Object 配列を構築します。文字列配列が必要な場合は、使用します

["a","b","c"].to_java(:string)

詳細については、JRuby wikiを参照してください。

于 2009-10-16T11:10:52.273 に答える
1

これは jruby の既知のバグのようです。Java オブジェクト/クラスでのメソッド ディスパッチを参照して、一致する varargs メソッドを見つけようとし、可変長引数を持つと定義されている Java メソッドに引数を渡そうとするとNameError がスローされます。

リンクによると、Rhino はvararg をサポートしています。

于 2009-07-04T21:23:54.320 に答える
0

Varargs は、コンパイラによって Object[] として処理されます。これは、エラー メッセージで説明されています。

JRuby未経験なのですが、配列引数だと動きますか?

于 2009-07-04T22:20:35.220 に答える