Передача Java-класса в качестве аргумента методу JRuby - PullRequest
0 голосов
/ 10 января 2012

Я хочу передать класс 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 ]

1 голос
/ 10 января 2012

Для этого используйте атрибут java_class обернутого класса JRuby.

В вашем коде

javaClass.java_class.new

должно работать.

Этот атрибут также следует использовать, когда метод Java ожидает в качестве параметра класс Java.

Дополнительные примеры см. https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby

0 голосов
/ 10 января 2012

Это прекрасно работает для меня - вы импортируете класс?Требует "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)
>>[]<<
...