在 JRuby 中获取由字符串表示的 Java 类?(没有评估)

mgu*_*mon 5 reflection class jruby

我想在 JRuby 中调用 Java 类的静态方法。目前为了实现这一点我使用:

class_name = "com.slackworks.naether.util.LogUtil"
clazz = eval(class_name)
clazz.setLogLevel( "debug" )
Run Code Online (Sandbox Code Playgroud)

必须使用 eval 将字符串转换为类似乎很笨拙。我环顾四周,但找不到 JRuby 助手来代替eval.


我需要将字符串转换为类的原因是,这种情况发生在通过 JRuby 或 RJB 处理请求的包装器中,具体取决于 Ruby 运行时。如果 Ruby 运行时使用 RJB,则调用将类似于:

class_name = "com.slackworks.naether.util.LogUtil"
clazz = Rjb::import( class_name )
clazz.setLogLevel( "debug" )
Run Code Online (Sandbox Code Playgroud)

mgu*_*mon 4

因此,我通过查看JRuby Wiki偶然发现了一个解决方案。Java::JavaClass.for_name可用于将 String 转换为 Java 类,而 Java 类可使用ruby_class. 使用 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 
Run Code Online (Sandbox Code Playgroud)