我想将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)'
我也尝试使用完全限定的类名:相同的结果。 感谢。
答案 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)
>>[]<<