PDA

Visualizza la versione completa : [JAVA] Richiamare proprietà da stringa


ale500
03-11-2005, 23:02
Salva a tutti,
la mia domanda è molto semplice...

in JavaScript esiste la funzione eval in grado di valutare una espressione di tipo stringa, quindi ad esempio

eval("a = 5;")

(o una sintassi simile, adesso non ricordo bene :confused: )

setterebbe la variabile a = 5, esiste un modo equivalente in Java???

del tipo io ho in un file di testo una serie di metodi memorizzati come stringhe, X ES. "toString()"

e devo fare una cosa del genere myClass.eval("toString()") per avere lo stesso effetto di fare myClass.toString()

fatemi sapere, aspetto impaziente, Grazie. :rollo:

floyd
04-11-2005, 11:15
se ti servono spiegazioni chiedi


public void execute() {
String s = "";
String method = "toString";
Class cs = s.getClass();
try {
java.lang.reflect.Method mt = cs.getMethod(method, new Class[0]);
Object result = mt.invoke(s, new Object[0]);
} catch (SecurityException sex) {
sex.printStackTrace();
} catch (NoSuchMethodException nsmex) {
nsmex.printStackTrace();
} catch (InvocationTargetException itex) {
itex.printStackTrace();
} catch (IllegalArgumentException iaex) {
iaex.printStackTrace();
} catch (IllegalAccessException iaex) {
iaex.printStackTrace();
}
}

ale500
04-11-2005, 11:25
io ho una cosa del genere...

ho il nome della variabile in un file di testo tipo: idPersona
ed ho una classe chiamata Persone sempre memorizzata all'interno di un file, tipo: com.a.b.c.Persone

adesso devo riuscire a richiamare il metodo setIdPersona della classe Persone, come posso fare?

Ho capito il tuo esempio ma soltanto vagamente...

Grazie del grandissimo aiuto che mi stai dando...

floyd
04-11-2005, 12:09
devi solo adattare il codice
creazione di un oggetto
Object o = Class.forName("com.a.b.c.Persone").newInstance();
il resto dovrebbe essere facile
:fighet:

ale500
04-11-2005, 12:17
allora perfetto, questa sera ci faccio un giro e ti faccio sapere...

Per ora grazie infinite!

PS
Un'ultima cosa...
e se il metodo che devo richiamare non ha valore di ritorno (void per intenderci) la sintassi è sempre la stessa? :confused:

unomichisiada
04-11-2005, 12:20
Originariamente inviato da ale500
allora perfetto, questa sera ci faccio un giro e ti faccio sapere...

Per ora grazie infinite!

PS
Un'ultima cosa...
e se il metodo che devo richiamare non ha valore di ritorno (void per intenderci) la sintassi è sempre la stessa? :confused:
Si chiama reflection, cerca anche su google così trovi do ed esempi

floyd
04-11-2005, 12:21
fai cosi'
mt.invoke(oggetto, parametri);

ale500
04-11-2005, 12:24
adesso si che ho capito....
benissimo...

ultima delucidazione...

nel caso in cui non ci siamo parametri???

scusate le domande ma non ho il pc davanti e quindi non posso provare niente...

Grazie.

floyd
04-11-2005, 12:43
mt.invoke(s, new Object[0]);
:fighet:

Loading