E' possibile eseguire dei comandi memorizzati dentro stringhe?
Esempio:
String prova = "System.out.println(\"Ciao\");";
come si può far eseguire ciò che sta dentro prova?
Grazie Ciao
E' possibile eseguire dei comandi memorizzati dentro stringhe?
Esempio:
String prova = "System.out.println(\"Ciao\");";
come si può far eseguire ciò che sta dentro prova?
Grazie Ciao
No, così su due piedi non si può. Il codice Java va prima compilato.Originariamente inviato da Pegasys
E' possibile eseguire dei comandi memorizzati dentro stringhe?
Esempio:
String prova = "System.out.println(\"Ciao\");";
Se spieghi meglio cosa vuoi fare, si può vedere. A partire da Java 6 è stata introdotta la Java Compiler API e la Java Scripting API.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
In pratica dopo aver analizzato un testo viene chiamato un metodo a seconda da cosa c'è scritto nel testo. E il nome del metodo da chiamare dovrebbe essere ritornato in una stringa
Sorry, spiega meglio ... fai un esempio.Originariamente inviato da Pegasys
In pratica dopo aver analizzato un testo viene chiamato un metodo a seconda da cosa c'è scritto nel testo. E il nome del metodo da chiamare dovrebbe essere ritornato in una stringa
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
mmm ad esempio
String testo = "prova del testo";
String risultato prova.analizzatesto(testo);
esegui ciò che è dentro risultato
in base a ciò che ci sarà dentro in risultato eseguirà vaiavanti() o fermailprogramma()
String analizzatesto(String testo)
{
if (testo.equals("prova del testo"))
return "vaiavanti()";
else
return "fermailprogramma()";
Visto così, la cosa più simile che mi viene in mente è il "functor pattern". In pratica si crea una interfaccia per definire la funzione e poi si creano delle implementazioni di questa interfaccia.
codice:public class Prova { public static void main (String[] args) { Funzione f = analizza (args[0]); f.func (); } public static Funzione analizza (String str) { if (str.equals ("hello")) { return new Funzione () { public void func () { System.out.println ("hello"); } }; } else { return new Funzione () { public void func () { System.out.println ("blabla"); } }; } } } interface Funzione { void func (); }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Perchè complicarsi così inutilmente la vita?
Più semplice, più chiaro, più utile.codice:int valore = analizzaStringa( stringa ); switch( valore ) { case 1: eseguiMetodo1(); break; case 2: eseguiMetodo2(); break; case 3: eseguiMetodo3(); break; ... }
Se il metodo da eseguire è noto a priori (ovvero, è dentro al file .java) allora anche l'elaborazione di analizzaStringa() porterà all'esecuzione di tale metodo solamente in caso di esisto positivo di una data condizione nota a priori. Questo si traduce con l'esempio che ho postato sopra.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Diciamo che così è più semplice ma bisogna analizzare tutti i casi. Se invece ci fosse un metodo che esegue i comandi dentro stringhe sarebbe più utile. Perchè la costruzione del comando avviene in più fasi.
Ad esempio:
String comando = "";
if (a > 2)
comando += "1"
else
comando += "2"
comando+= "-"
if (b < 3)
comando += "8"
else
comando += "6"
in questo modo potrebbe esserci scritto:
1-8
1-6
2-8
2-6
E ritorni sempre e comunque al punto di partenza... nessuno ti vieta di far tornare alla funzione un numero univoco... sempre e solo una sarà la funzione eseguita e sarà contraddistinta sempre dallo stesso numero.
e ottienicodice:f (a > 2) comando += 1; else comando += 2; if (b < 3) comando += 10; else comando += 20;
Sempre lo stesso numero di risultati...codice:11 12 21 22
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Hai ragione. La questione in questi casi è se si vuole offrire una "astrazione" delle operazioni da eseguire o se si vuole banalmente fare una ramificazione con if/switch.Originariamente inviato da LeleFT
Perchè complicarsi così inutilmente la vita?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet