我想在 JRuby 中调用 Java 类的静态方法。目前为了实现这一点,我使用:
class_name = "com.slackworks.naether.util.LogUtil"
clazz = eval(class_name)
clazz.setLogLevel( "debug" )
必须使用 eval 将字符串转换为类似乎很笨拙。我环顾四周,但找不到 JRuby 助手来代替 eval
。
我需要将字符串转换为类的原因是,这发生在处理 JRuby 或 RJB 请求的包装器中,具体取决于 Ruby 运行时。如果 Ruby 运行时使用 RJB,则调用类似于:
class_name = "com.slackworks.naether.util.LogUtil"
clazz = Rjb::import( class_name )
clazz.setLogLevel( "debug" )
最佳答案
所以我通过查看 JRuby Wiki 偶然发现了一个解决方案. Java::JavaClass.for_name
可用于将 String 转换为 Java 类,使用 ruby_class
可将其转换为 Ruby 类。使用 IRB 的示例:
jruby-1.6.8 :053 > math_class = Java::JavaClass.for_name("java.lang.Math").ruby_class
=> Java::JavaLang::Math
jruby-1.6.8 :054 > math_class.floor( 10.7 )
=> 10.0
关于class - 获取由 JRuby 中的字符串表示的 Java 类? (没有评估),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125154/