選択肢:
Java から Java コンパイラを呼び出し、クラスを作成し、動的に呼び出すことができます。これは、数行のスニペットではやり過ぎです。
「20 個の命令」がすべて類似した形式であり、語彙が限られている場合は、独自の「命令セット」を作成し、ディスパッチ関数を使用してそれをキーオフできます。(これは、あらゆる言語の一般的な解決策です。)
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>