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

标签 class reflection jruby

我想在 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/

相关文章:

c++ - 在 C++ 中,我不能在不分离 header 和 cpp 的情况下实现这些类吗?

python - Python中的旧样式类和新样式类有什么区别?

class - 如何将 htmlpurifier 与 symfony2 集成?

c# - 将运行时生成的委托(delegate)包装在工厂中,并将调用结果作为参数传递

ruby-on-rails - 在 Windows 上部署的 JRuby 有任何后台进程 gem 吗?

Python - self ,没有 self 和 cls

c# - 使用 .net 反射查找共同的祖先类

java - 动态获取当前行号

ruby-on-rails - Rails 3.1 部署到 JBoss 4.2.2

mysql - 在 (J)Ruby 中解析 XML 并插入数据库