プログラマメモ2 - programmer no memo2

org.jruby.javasupportパッケージのJavaUtilとJavaEmbedUtils 2008/08/31

JRubyです。

しばらく、Javaからスクリプトを呼び出すところで試行錯誤しています。
いろいろ試していてまあこれでいいかなぁと思ったところで、困ったことが。

Javaから生成されたインスタンスを渡すのですが、JRuby側でどうしてもそのインスタンスのメソッドにアクセスできなかったのです。

NoMethodErrorとかでてしまいました。

前できたのにどうしてかなぁと悩んでいましたら、Java側のオブジェクトをJRuby側に変換する際に使用していたユーティリィがJavaUtil.convertJavaToRubyであることに気がつきました。

Java側の機能をそのまま引き継ぎたい場合は、JavaEmbedUtils.javaToRubyを使うのが正しいようです(多分)。

ちなみに,JavaEmbedUtils.javaToRubyの実装みてなるほどとわかるのですが、内部では、JavaEmbedUtils.javaToRubyを使用しています。そこで変換されたオブジェクトがorg.jruby.javasupport.JavaObjectであった場合,Java.wrapでラップするとかいう処理になっています。

あと、JavaEmbedUtils.javaToRubyは、2つ引数と、3つ引数があるのですが、Classを指定する3つ引数をわざわざ使わなくても2つ引数でいいようです。内部で、object.getClass()して3つ引数のメソッドを使っているので。

結論は、僕は、JavaEmbedUtils.javaToRubyを使うでしょうかね。

: