String in Befehl umwandeln

Markus138

Mitglied
Hallo,

ich habe einen String in dem steht zB "foo.getName()". Jetzt würde ich gerne diesen String so umwandeln, dass ich wirklich foo.getName() durchführen kann. Leider weiß ich nicht wie man das umsetzen kann, weiß jemand Bescheid?
 
Mit Reflection (siehe Trail: The Reflection API (The Java™ Tutorials)) kannst du zumindest einen Teil deiner Vorstellung verwirklichen. Java ist keine interpretierte Sprache, da kann man nicht mal eben so einen String als Befehl interpretieren.

Man könnte natürlich zur Laufzeit den nötigen Code erzeugen, hierfür gibt es z.B. BCEL.

Was ich noch anmerken wollte: Wenn du in JAVA eine solche Funktionalität brauchst, wäre es vielleicht sogar besser eine Scriptsprache wie z.B. LUA zu integrieren. Das hängt allerdings von deinen genauen Anforderungen ab.
 
Zuletzt bearbeitet:
Reflection ist das richtige Stichwort, aber bei sowas wie
Java:
SomeObject foo = new SomeObject();
SomeObject bar = new SomeObject();

String s = "foo.doSomething();";

execute(s);
haut's ihn raus, weil "foo" und "bar" für sich keine Bedeutung haben...

Klingt aber irgendwie, als sollte man sich da was anderes überlegen ... wenn du das "Big Picture", also die "Gesamtabsicht" beschreiben würdest, könnte man da bestimmt gezielter Lösungsvorschläge machen. Zu sagen: "Ich will einen Wolframdraht in einem Vakuum-Glaszylinder zum Glühen bringen" erfordert u.U. eine etwas komplexere Antwort als "Ich will das Licht anmachen".

(Das soll kein Hinweis auf die Verwendung von switch sein :joke: )
 
Eben: foo und bar sind Bezeichner von Referenzen. Die werden meist in Adressen übersetzt und vom Compiler nicht irgendwo symbolisch abgelegt; Deswegen kommst du da mit Reflection auch nicht ran.

Ich sagte ja: Mit Reflection lässt sich nur ein Teil deiner Vorstellung umsetzen. Du könntest anders vorgehen und eine Wrapperklasse bauen, die Objekte mit Namen in einer Tabelle hält, diese über den Namen holt und dann per Reflection den restlichen Kram macht.

Nachteil davon: Du müsstest erst alles was du verwenden willst registrieren.

Worauf willst du genau hinaus? Was willst du tun?
 
Danke für den Hinweis mit Reflection. Ich schaue mir gerade an, ob das für meinen Zweck reicht.

Mein Problem allgemein:

In dem String steht immer etwas anderes drin. Im ersten Teil steht eine Variable, im 2. Teil steht ein Getter.

Beispiel:

private Produkt1 produkt1;
private Produkt2 produkt2;
...

im String steht jetzt zB:

produkt2.getName()

(name ist eine Variable in Tabelle Produkt2; aber auch name ist nicht statisch, pro Tabelle gibt es verschiedene Möglichkeiten an gettern, die im String stehen können).

Der String soll also mit dem jeweils richtigen Inhalt befüllt werden und so ausgeführt werden.

Sinn und Zweck von dem ganzen: je nachdem
 
Hört sich nicht besonders Sinnvoll an für eine statisch typisierte Sprache wie Java, entweder würde ich da die Spraceh ändern oder das vorgehen, aber so macht man das in Java eigentlich nciht 😉
 

Neue Themen


Zurück
Oben