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

evalJavaScript、Perl、Python などの動的型付け言語の関数/メソッドに相当する Java を探しています。残念ながらありません。

Java でこの種のことを行うにはさまざまな方法がありますが、それらはすべて高価であり、他にもさまざまな欠点があります。

私のアドバイスは、要件を満たす別の (より簡単で安価な) 方法を探すことです。


あなたが本当にevalルートをたどる必要がある場合は、オプションの合理的な範囲を提供するいくつかの関連Q / Aがあります.

于 2012-04-30T05:05:49.080 に答える
0

Byte Code Engineering Libraray (BCEL)またはASMご覧ください。どちらの場合も、物事がごちゃごちゃして複雑になりすぎる可能性があるため、Stephen が提案した方法をお勧めし、別の方法を探すことをお勧めします。

たとえば、 somif elseステートメントを使用して、通常の方法で関数を呼び出すことができます。おそらく次のようになります。

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