我在运行时构建了一个字符串,如
str = "a+dataValue(i)";
其中'a'是变量,'dataValue(i)'
是带参数i
现在我有一个函数,我想使用string 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
谢谢。
答案 0 :(得分:2)
您正在寻找动态类型语言(如JavaScript,Perl,Python等)中的eval
函数/方法的Java等价物。不幸的是没有一个。
在Java中有很多种方法可以做这种事情,但它们都很昂贵,并且还有其他各种各样的方面。
我的建议是寻找另一种(更简单/更便宜)的方式来满足您的要求。
如果你确实需要沿着eval
路线走下去,那么这里有一些相关的Q / A,可以合理地覆盖这些选项。:
答案 1 :(得分:0)
您可以查看Byte Code Engineering Libraray (BCEL)或ASM。在任何一种情况下,事情都会变得混乱和过于复杂,所以我会建议斯蒂芬建议并试图寻找另一种方式。
例如,您可以使用somif
else
语句以通常的方式调用您的函数,可能类似于:
String functionName = "...";
if (functionName.toLowerCase().equals("someMethodName")
{
someMethodName(someParams);
}