# String in Befehl umwandeln



## Markus138 (15. Jan 2010)

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?


----------



## MrWhite (15. Jan 2010)

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.


----------



## Marco13 (15. Jan 2010)

Reflection ist das richtige Stichwort, aber bei sowas wie

```
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: )


----------



## MrWhite (15. Jan 2010)

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?


----------



## Markus138 (15. Jan 2010)

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


----------



## maki (15. Jan 2010)

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


----------



## Marco13 (15. Jan 2010)

Bei _Instanz_variablen wie
private Produkt1 produkt1;
würde das mit reflection gehen...


----------



## Markus138 (15. Jan 2010)

auch wenn "man das in java nicht so macht" funktionierts mit Reflections. Danke für den Tipp!


----------



## Chloroplast (19. Okt 2011)

ich hab ein ähnliches problem. auf der seite mit dem link versteh ich das nicht, kann mir jmd. helfen?


----------



## faetzminator (19. Okt 2011)

Und inwiefern sollte man dir bei deiner Fragestellung helfen können :bahnhof: ?


----------



## xerberuz (19. Okt 2011)

Schau dir das mal an:
Java Scripting Programmer's Guide

Wobei ich auch zu einer anderen Lösung raten würde.


----------

