2012-01-10 111 views
0

我想将Java类传递给JRuby方法,并在方法中实例化类对象(我想要一种在一组Java类上运行某些测试的通用方法,需要实例化一个数量的这些对象,直到运行时才知道)的:将Java类作为参数传递给JRuby方法

#... 
somethingMethod(Bar) 
#.... 

def somethingMethod(javaClass) 
    number.each do |n| 
    fu=javaClass.new 
    #...otherStuff 
    end 
end 

但这似乎并没有被这种方式是可行的。我得到:

Failure/Error: somethingMethod(Bar) 
    NameError: 
     uninitialized constant Bar 
    # somethingTest.rb:45:in `(root)' 

我也试过使用完全合格的类名:相同的结果。 谢谢。

回答

1

为此,请使用JRuby包装类的java_class属性。

在你的代码

javaClass.java_class.new 

应该工作。

当Java方法需要Java类作为参数时,您还应该使用此属性。

更多的例子,请参阅 https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby

+0

问题是我使用com.foo.Bar而不是com :: foo :: Bar来完全限定类名(!)。和'javaClass.java_class.new'确实没有**工作:'失败/错误:somethingMethod(com :: foo :: Bar) NoMethodError: 未定义的方法new for com.foo.Bar::JavaClass' – ggg 2012-01-10 16:29:53

+0

谢谢! :-) – ggg 2012-01-10 16:35:21

0

这工作得很好,我 - 你导入类?需要“java”?

jruby-1.6.2 :001 > def foo(c) 
jruby-1.6.2 :002?> cc = c.new 
jruby-1.6.2 :003?> puts ">>#{cc}<<" 
jruby-1.6.2 :004?> end 
jruby-1.6.2 :005 > foo(String) 
>><< 
jruby-1.6.2 :007 > foo(ArrayList) 
NameError: uninitialized constant ArrayList 
jruby-1.6.2 :008 > foo(java.util.ArrayList) 
jruby-1.6.2 :009 > require 'java' 
jruby-1.6.2 :010 > foo(java.util.ArrayList) 
>>[]<< 
相关问题