3

Javaのこのコード:

for (Integer x=1; x <= 3; x++) {
    y = "array[" + Integer.toString(x) + "] = a" + Integer.toString(x) + ".getText();";
    System.out.println(y);
    }

プリントアウト:

array[1] = a1.getText();
array[2] = a2.getText();
array[3] = a3.getText();

ただし、文字列yを出力する代わりに、実行したいと思います。Javaでこれを行うにはどうすればよいですか?

これが不可能な場合、3つの手順を使用するのとは異なり、私が望むことを達成する別の方法はありますか?

array[1] = a1.getText();
array[2] = a2.getText();
array[3] = a3.getText();

簡単にするために、20個の命令が必要ですが、3個を使用しました。さらに重要なことに、私はJavaについてもっと学び、より洗練されたソリューションを探しています。

4

4 に答える 4

1

Java自体はスクリプト言語ではありませんが、evalメソッドを使用したスクリプトをサポートするライブラリjavax.scriptがあります。プログラムへの入力パラメーターとして式を許可したいときに使用しました。

于 2013-02-23T16:29:51.730 に答える
1

あなたが探しているのは、多くのインタープリター言語での「eval」です。Java では、実行時にソース コードを評価することはできません。これは、インタープリター言語ではなくコンパイル言語であるという特性です。

リフレクションまたはバイトコード生成によって機能の一部を取得できますが、これらは通常、日常のプログラミングのルーチン部分ではなく、フレームワークまたはライブラリを開発する人々によって使用される高度な機能です。

于 2013-02-23T16:22:40.693 に答える
0

単純なループはあなたの仕事をすることができます:

for(int i=0;i<array.length;i++){
array[i] = a[i].getText();
}
于 2013-02-23T16:19:09.230 に答える
0

選択肢:

  1. Java から Java コンパイラを呼び出し、クラスを作成し、動的に呼び出すことができます。これは、数行のスニペットではやり過ぎです。

  2. 「20 個の命令」がすべて類似した形式であり、語彙が限られている場合は、独自の「命令セット」を作成し、ディスパッチ関数を使用してそれをキーオフできます。(これは、あらゆる言語の一般的な解決策です。)

  3. Lisp などのより強力な言語に慣れている場合は、Java で使用できるスクリプト言語の一部にも eval 関数があります。

私が groovy を気に入っているのは、動的で機能的な使用、クロージャー、対話型、探索的 (例: vars とメソッドのタブ補完) の両方の長所があり、Java 言語のスーパーセットであり、既存の Java クラスとすべての Java クラスを使用できるからです。瓶。Groovy コンソールを簡単に埋め込んで (サーバーからでも) ポップアップし、インタラクティブに調べたり、値を調べたりすることができます。

以下は、groovy シェルからコードを評価する例です。Java からの呼び出しは実質的に同じです。http://groovy.codehaus.org/Embedding+Groovyを参照してください

$ groovysh
Groovy Shell (1.8.4, JVM: 1.6.0_24)
Type 'help' or '\h' for help.
---------------------------------------------------------------------------------------------
groovy:000> class Athing {  String name; public Athing(String name){ this.name=name; }; String getText() { return name + "'s getText() returns..."; }; }
===> true
groovy:000> a1 = new Athing("a1"); a2 = new Athing("a-two");  a3 = new Athing("A_3"); 
===> Athing@6e7616ad
groovy:000> a1.getText()        // showing 
===> a1's getText() returns...
groovy:000> b = new Binding();
===> groovy.lang.Binding@2c704cf5
groovy:000> array = [ 'not','set','yet' ]   // create an array for return values
===> [not, set, yet]
groovy:000> b.setVariable( "a1", a1 ); b.setVariable( "a2", a2 ); b.setVariable( "a3", a3 ); b.setVariable( "array", array );
===> null
groovy:000> shell = new GroovyShell(binding);
===> groovy.lang.GroovyShell@24fe2558
groovy:000> code = "array[1] = a1.getText();\n" + "array[2] = a2.getText();\n" + "array[3] = a3.getText();\n";
===> array[1] = a1.getText();
array[2] = a2.getText();
array[3] = a3.getText();

groovy:000> array                        // value of array before
===> [not, set, yet]
groovy:000> shell.evaluate( code );      // evaluate the string of code we were given
===> A_3's getText() returns...
groovy:000> array
===> [not, a1's getText() returns..., a-two's getText() returns..., A_3's getText() returns...]
groovy:000> 
于 2013-02-23T19:01:49.463 に答える