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になるのが意外