Java / Ruby:有没有办法在Java中执行.constantize或Object.send()?

时间:2010-11-11 18:43:15

标签: java ruby-on-rails

在Ruby中,您可以"var1".constantize获取实际变量var1。 Ruby也有Model.Send(“方法名称,参数可以在这里等”),它与实际调用该方法相同。

我想做什么......有点棘手......我希望在我的java应用程序中将字符串“var1 == var2”转换为实际变量,然后进行评估。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

在Java中,类似的行为是通过Reflection API实现的。但是,由于Java是一种编译语言,因此在编译时会删除局部变量(在方法,构造函数,参数等中)信息。 但是,您仍然可以完全访问类名,层次结构,方法和字段(类变量) 一个很好的起点是Object的Reflection API tutorial或getClass()方法。

答案 1 :(得分:2)

您是否考虑过使用JRuby

关于你的问题:

  1. 没有可以进行constantize的对等体,它允许使用类似eval的语法,您可以在其中传入String并将其转换为Java中的代码。你可以像Class.forName那样从String中加载一个特定的类,但听起来并不是你想要的。
  2. 您可以使用Java反射API动态调用类上的方法查看Jakarta Commons BeanUtils可能有用的一些实用方法。

答案 2 :(得分:0)

在Java中,如果您想要动态查找变量,通常会将它们放在Map中,并使用该Map的键进行查找。

你能否详细解释一下你想要做的事情,我怀疑你想要做的事情可以用不同的方式在Java中完成。