eval() Methode für Java?
Uwe
- java
0 DerB0 Slyh
0 MudGuard0 Martin Jung0 MudGuard0 Martin Jung0 MudGuard0 Martin Jung0 MudGuard0 Martin Jung0 MudGuard
Hallo an alle,
gibt es eigentlich sowas wie die eval() Funktion aus javascript auch in Java? Bin dazu bisher noch nicht fündig geworden.
Grüße Uwe
Hallo an alle,
gibt es eigentlich sowas wie die eval() Funktion aus javascript auch in Java? Bin dazu bisher noch nicht fündig geworden.Grüße Uwe
hallo,
erkundige dich mal nach "reflektions"
mfg
Hallo,
erkundige dich mal nach "reflektions"
Reflections.
Und eigentlich ist das nur begrenzt mit "eval()" vergleichbar.
Gruß
Slyh
Hi,
gibt es eigentlich sowas wie die eval() Funktion aus javascript auch in Java? Bin dazu bisher noch nicht fündig geworden.
eval() ist m.E. ein typisches Merkmal in Interpreter-Sprachen (wie z.B. Javascript).
Bei Interpreter-Sprachen steht zur Laufzeit immer der Parser für die Sprache zur Verfügung (der wird ja für die Interpretation des Scripts sowieso benötigt), also kostet es nichts, diesen auch für das Script selbst zur Verfügung zu stellen.
Bei Compiler-Spracher (wie z.B. Java) steht der Parser üblicherweise nur zur Kompilierungszeit, aber nicht zur Laufzeit, zur Verfügung. Daher haben derartige Sprachen meist keine eval()-Funktion - denn dann müßte der komplette Parser auch zur Laufzeit zur Verfügung gestellt werden.
Was genau hast Du denn vor, daß Du meinst, eval() zu brauchen?
cu,
Andreas
Hi,
Bei Compiler-Spracher (wie z.B. Java) steht der Parser üblicherweise nur zur Kompilierungszeit, aber nicht zur Laufzeit, zur Verfügung. Daher haben derartige Sprachen meist keine eval()-Funktion - denn dann müßte der komplette Parser auch zur Laufzeit zur Verfügung gestellt werden.
Man kann natürlich auf Ebene des kompilierten Codes arbeiten -> http://jakarta.apache.org/bcel/index.html
Viele Grüße,
Martin Jung
Hi,
Bei Compiler-Spracher (wie z.B. Java) steht der Parser üblicherweise nur zur Kompilierungszeit, aber nicht zur Laufzeit, zur Verfügung. Daher haben derartige Sprachen meist keine eval()-Funktion - denn dann müßte der komplette Parser auch zur Laufzeit zur Verfügung gestellt werden.
Man kann natürlich auf Ebene des kompilierten Codes arbeiten -> http://jakarta.apache.org/bcel/index.html
Und was hat das mit eval zu tun?
eval wird ja - wenn überhaupt sinnvoll - dann eingesetzt, wenn der auszuwertende Code erst zur Laufzeit (z.B. aus User-Eingaben) entsteht - da gibt es keinen kompilierten Code.
cu,
Andreas
Hi,
Und was hat das mit eval zu tun?
Dass man zur Laufzeit eine Klasse generieren kann?
Viele Grüße,
Martin Jung
Hi,
Und was hat das mit eval zu tun?
Dass man zur Laufzeit eine Klasse generieren kann?
Naja, dazu muß man aber wieder den String parsen - wozu aber der Parser fehlt bzw. selbst mitgebracht werden muß ...
cu,
Andreas
Hi,
Naja, dazu muß man aber wieder den String parsen - wozu aber der Parser fehlt bzw. selbst mitgebracht werden muß ...
Wenn man mit z.B. BCEL ein eval()-Äquivalent in Java implementieren möchte, benötigt man _einen_ Parser (dies trifft jedoch z.B. auch auf XML-Verarbeitung zu). _Der_ Java-Parser hingegen ist nicht zwangsläufigerweise notwendig.
Bevor ich meine Haarspalterei hiermit beende: Es hat seine (wohlüberlegten) Gründe, warum eine solche Funktionalität keine Entsprechenung in Java-Syntax und -Plattform hat ;-)
Viele Grüße,
Martin Jung
Hi,
Naja, dazu muß man aber wieder den String parsen - wozu aber der Parser fehlt bzw. selbst mitgebracht werden muß ...
Wenn man mit z.B. BCEL ein eval()-Äquivalent in Java implementieren möchte, benötigt man _einen_ Parser [...]. _Der_ Java-Parser hingegen ist nicht zwangsläufigerweise notwendig.
Unter eval() verstehe ich, daß dort Code derselben Sprache ausgewertet wird, in der das eigentliche Script/Programm geschrieben ist.
Im Falle von Java ist also der (bzw. ein) Java-Parser erforderlich.
cu,
Andreas
Hi,
ich dann doch nochmal ;-)
Unter eval() verstehe ich, daß dort Code derselben Sprache ausgewertet wird, in der das eigentliche Script/Programm geschrieben ist.
Im Falle von Java ist also der (bzw. ein) Java-Parser erforderlich.
Yep, ich legte die Betonung auf _einen_ Parser. Was in der Praxis bedeutet, dass auf den Zielrechnern die Installation der JRE weiterhin ausreicht - da ich den Java-Parser-für-mein-eval als Teil meiner Anwendung mit ausliefere.
Das war doch Dein ursprüngliches pragmatisches Gegenargument, oder (ich gehe davon aus, dass Du ein Java-eval aus prinzipiellen Gründen sowieso nicht gut heißt..)?
Viele Grüße,
Martin Jung
Hi,
Unter eval() verstehe ich, daß dort Code derselben Sprache ausgewertet wird, in der das eigentliche Script/Programm geschrieben ist.
Im Falle von Java ist also der (bzw. ein) Java-Parser erforderlich.
Yep, ich legte die Betonung auf _einen_ Parser. Was in der Praxis bedeutet, dass auf den Zielrechnern die Installation der JRE weiterhin ausreicht - da ich den Java-Parser-für-mein-eval als Teil meiner Anwendung mit ausliefere.
Das war doch Dein ursprüngliches pragmatisches Gegenargument,
Zitat aus meinem ersten Posting in diesem Thread:
denn dann müßte der komplette Parser auch zur Laufzeit zur Verfügung gestellt werden.
oder (ich gehe davon aus, dass Du ein Java-eval aus prinzipiellen Gründen sowieso nicht gut heißt..)?
Ein Java-eval() hab ich bisher genauso oft vermißt wie ein C++ oder C eval(): nie.
Aber auch in Sprachen, in denen eval() vorhanden ist, hab ich das noch nicht wirklich gebraucht, es gab andere (bessere) Lösungen.
cu,
Andreas
Hi Andreas,
Ein Java-eval() hab ich bisher genauso oft vermißt wie ein C++ oder C eval(): nie.
Aber auch in Sprachen, in denen eval() vorhanden ist, hab ich das noch nicht wirklich gebraucht, es gab andere (bessere) Lösungen.
100%ige Zustimmung.
Viele Grüße,
Martin