Aus den Inhalt einer StringVariable in eine Funktion erstellen und diese ausführen

P_H_I_L

Erfahrenes Mitglied
In String enthaltenen Java-Code zur Laufzeit mitausführen. Geht das?

Hallo,
kann ich eigentlich den Inhalt eines Strings in eine Funktion oder in eine getter/setter-Anweisung umwandeln?
Ein Beispiel:
ich habe eine Funktion die mir meine Setter mit Wert/Inhalt zusammenbaut. Ich liefere einen String zurück.
in dem String steht folgendes:

String Retrurn_Wert = "getSBVARS().getPartner().setGruppe("Verein");"

Nun will ich den Stringinhalt irgendwie umwandeln so dass ich den setter absetzen/executen kann, um in der Variable "setGruppe" wirklich mit dem Wert "Verein" zu setzen.

Geht das irgendwie in JAVA?
Bin da ratlos.

Achja, die Entwicklungsumgebung mit der ich arbeite ist Sun Java Studio Creator.



Dank im Voraus,
Phil
 
Zuletzt bearbeitet:

P_H_I_L

Erfahrenes Mitglied
Hi Tom,
bin ein keiner Newbie und tu mich ziemlich schwer.

Also ist es möglich, einen in String enthaltenen Wert als Java-Code zur Laufzeit mitaus-zuführen. Verstehe ich das Richtig?
Ist das Gefährlich?

Hast du den Diesbezüglich ein konkreteres beispiel? Find mich bei den Links irgendwie nicht ganz zu recht.... *G*

Stell mich grad bisschen dumm glaub ich, da deine Beispiele alle ein wenig was anderes machen kann das sein?

Sollt ich falsch liegen tuts mir leid.....
 

Thomas Darimont

Erfahrenes Mitglied
Hallo,

Also ist es möglich, einen in String enthaltenen Wert als Java-Code zur Laufzeit mitaus-zuführen. Verstehe ich das Richtig?
Ist das Gefährlich?
Ja (je nach dem was die ScriptEngine damit macht) und Ja.

Stell mich grad bisschen dumm glaub ich, da deine Beispiele alle ein wenig was anderes machen kann das sein?
Alle Beispiele zeigen (unterschiedliche Wege) wie man dynamisch ausführbaren Code erzeugen kann, sei es in Scriptform oder als konkretes Class-File.

Schau mal hier:
Java:
package de.tutorials.training;

import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class ScriptEngineExample {

    public static void main(String[] args) throws Exception{

        A a = new A(new B(new C("bubu")));

        System.out.println(a.getB().getC());
        
        ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("javascript");
        Bindings bindings = scriptEngine.createBindings();
        bindings.put("a", a);
        
        scriptEngine.eval("a.getB().getC().setValue('tutorials.de');",bindings);
        
        System.out.println(a.getB().getC());
        
    }

    static class A {
        B b;

        public A(B b) {
            this.b = b;
        }

        public B getB() {
            return b;
        }
    }

    static class B {
        C c;

        public B(C c) {
            this.c = c;
        }

        public C getC() {
            return c;
        }
    }

    static class C {
        String value;

        public C(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public String toString() {
            return super.toString() + " " + value;
        }
    }
}

Ausgabe:
Code:
de.tutorials.training.ScriptEngineExample$C@42e816 bubu
de.tutorials.training.ScriptEngineExample$C@42e816 tutorials.de

Gruß Tom
 

P_H_I_L

Erfahrenes Mitglied
so habe jetzt die ganze zeit rumgespielt. Doch habe nie eine ScriptEngine mit der Funktion getEngineFactorie() gefunden!!
Jetzt weiß ichs auch warum. kann man erst ab java 1.6 verwenden. :-(

hab aber den sun java studio creator der 1.4 verwendet.

gibt eine andere möglichkeit Tom?
will eigentlich nur per script diese anweisung zur Laufzeit einspeisen:
getSBVARS().getPartner().setGruppe("blabla");


Hast noch ne Idee für mich?