Ruby to Java 変換表
JRubyからJavaのメソッドを呼ぶ場合、メソッドの引数は自動で型変換される。
Javaのメソッドの引数を具体的な型で定義したとき、Rubyのどの型を受け入れられるか調べた。
(以下のようなメソッドをJRubyから引数に様々なものを入れて呼び出してみた)
public static void i(int i){ System.out.println(i); }
プリミティブ型
Java引数型 | Ruby -> Java |
---|---|
boolean | nil/false -> false, true -> true |
char | nil -> '\0', Fixnum/Float -> char |
byte | nil -> 0, Fixnum/Float -> byte |
short | nil -> 0, Fixnum/Float -> short |
int | nil -> 0, Fixnum/Float -> int |
long | nil -> 0, Fixnum/Float -> long |
float | nil -> 0.0, Fixnum/Bignum/Float -> float |
double | nil -> 0.0, Fixnum/Bignum/Float -> double |
Wrapperクラスもnil -> nullになるほかは同じだった。
BigIntegerとString
Java引数型 | Ruby -> Java |
---|---|
BigInteger | Fixnum/Bignum/Float -> BigInteger |
String | String/Symbol -> String |
Number型、BigDecimal型は型変換されずダメだった。(nilのみ受け入れ)
Collection
Java引数型 | Ruby -> Java |
---|---|
List | Array -> org.jruby.RubyArray(implements List) |
Collection | Array -> org.jruby.RubyArray(implements Collection) |
Iterable | Array -> org.jruby.RubyArray(implements Iterable) |
Map | Hash -> org.jruby.RubyHash(implements Map) |
RubyArrayはList,Collection,Iterableを実装している。
ArrayList, HashMapなどの具象クラスは型変換されない。
(RubyArrayはArrayListではないので当然か)
Set, HashSetはダメだった。