JRubyからJavaにclassオブジェクトを渡す
JRubyからJavaにclassオブジェクトを渡すとどの型になるのか試してみた。
Javaのコードは単純にclass文字列表現をprint
public class ClassSample{ public static void print(Class clazz){ System.out.println(clazz.toString()); } }
JRubyではJavaのビルトインクラスとJRubyで定義したクラス(継承ありなし)のclassオブジェクトをJavaに渡す
include Java Java::ClassSample.print java.util.Date.class Java::ClassSample.print java.util.Date.java_class class ClassA; end Java::ClassSample.print ClassA.class begin Java::ClassSample.print ClassA.java_class rescue => e p e end java_import 'java.util.HashMap' class ClassB < HashMap ; end Java::ClassSample.print ClassB.class Java::ClassSample.print ClassB.java_class
その結果
class org.jruby.RubyClass class java.util.Date class org.jruby.RubyClass #<NoMethodError: undefined method `java_class' for ClassA:Class> class org.jruby.RubyClass class java.util.HashMap
ClassBがHashMapになるのが意外