【问题标题】:Passing Java class as argument to JRuby method将 Java 类作为参数传递给 JRuby 方法
【发布时间】:2012-01-10 16:12:03
【问题描述】:

我想将一个 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)'

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

【问题讨论】:

    标签: java methods jruby argument-passing


    【解决方案1】:

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

    在您的代码中

    javaClass.java_class.new
    

    应该可以。

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

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

    【讨论】:

    • 问题是我使用 com.foo.Bar 而不是 com::foo::Bar 来完全限定类名(!)。 javaClass.java_class.new 没有没有工作:Failure/Error: somethingMethod(com::foo::Bar) NoMethodError: undefined method new for class com.foo.Bar::JavaClass
    【解决方案2】:

    这对我来说很好——你是在导入类吗?需要“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)
    >>[]<<
    

    【讨论】:

      猜你喜欢
      • 2013-01-28
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多