0

我在运行时构造了一个字符串,例如

str = "a+dataValue(i)";

其中 'a' 是一个变量,'dataValue(i)'是一个带有参数 i 的函数

现在我有一个函数,我想在其中使用字符串 str 作为代码的一部分。例如

 public void func()
     {
        for(int i=0;i<n;i++)
          Sytem.out.println(converted_to_java_source(str)); //(i.e.) a+dataValue(i);  it should be converted at runtime not compile time 

     } 

我需要如下输出:

 when a = 2; dataValue(i) returns i; n = 5
 On call to func it should print
 2 3 4 5 6 7

谢谢你。

4

2 回答 2

2

您正在寻找eval与 JavaScript、Perl、Python 等动态类型语言中的函数/方法等效的 Java。不幸的是,没有一个。

在 Java 中有多种方法可以做这种事情,但它们都很昂贵,并且还有许多其他的缺点。

我的建议是寻找另一种(更简单/更便宜)的方式来满足您的要求。


如果你真的需要走这eval条路,那么这里有一些相关的 Q/A,它们对选项进行了合理的覆盖。:

于 2012-04-30T05:05:49.080 回答
0

您可以查看Byte Code Engineering Libraray (BCEL)ASM。在任何一种情况下,事情都会变得混乱和过于复杂,所以我会推荐斯蒂芬的建议并尝试寻找另一种方式。

例如,您可以使用 somif else语句以通常的方式调用您的函数,可能类似于:

String functionName = "...";
if (functionName.toLowerCase().equals("someMethodName")
{
     someMethodName(someParams);
}
于 2012-04-30T05:15:02.180 回答