将Java类作为参数传递给JRuby方法

时间:2012-01-10 16:12:04

标签: java methods jruby argument-passing

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

#...
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)'

我也尝试使用完全限定的类名:相同的结果。 感谢。

2 个答案:

答案 0 :(得分:1)

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

在您的代码中

javaClass.java_class.new

应该有用。

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

有关更多示例,请参阅 https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby

答案 1 :(得分: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)
>>[]<<