Auswahlmöglichkeiten:
-
können Sie den Java-Compiler von Java aus aufrufen, eine Klasse erstellen und diese dynamisch aufrufen. Das ist zu viel Aufwand für ein paar Zeilen Snippet.
-
Wenn Ihre "20 Anweisungen" alle eine ähnliche Form haben und Sie über ein begrenztes Vokabular verfügen, können Sie Ihren eigenen "Anweisungssatz" erstellen und diesen mit einer Dispatch-Funktion abfragen. (Dies ist eine generische Lösung für jede Sprache.)
-
Wenn Sie mit mächtigeren Sprachen wie Lisp vertraut sind, haben einige der verfügbaren Skriptsprachen für Java auch eine eval-Funktion.
Ich mag Groovy, weil es das Beste aus beiden Welten: dynamische und funktionale Nutzung, Schließungen, interaktive, explorative (zB Tab-Vervollständigung auf vars und Methoden), und ist ein Superset der Java-Sprache und kann alle Ihre bestehenden Java-Klassen und Jars verwenden. Es ist einfach, eine Groovy-Konsole einzubetten, die sich (sogar von Ihrem Server aus) öffnet und in der Sie interaktiv herumstöbern, Werte untersuchen usw.
Unten sehen Sie ein Beispiel für die Auswertung des Codes aus der Groovy-Shell; der Aufruf aus Java ist praktisch identisch; siehe 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>