
Originariamente inviata da
Alex'87
Se vuoi usare la reflection puoi iniziare guardando questa discussione su Stack Overflow, che mi pare abbastanza completa:
http://stackoverflow.com/questions/1...me-as-a-string
Usando SpEL (ma in questo modo ti porti dietro un pezzo dello Spring Framework...) però è molto più semplice perché ti nasconde tutta la reflection:
codice:
Persona persona = new Persona();
String s = "indirizzo.numeroCivico";
ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true));
Expression expression = parser.parseExpression(s);
String numeroCivico = (String) expression.getValue(persona);
http://docs.spring.io/spring/docs/3....pressions.html
Purtroppo non posso usare Spring. Mi sono documentato un po' e ho abbozzato queste quattro righe di codice che sembra funzionino. Mi potere dare suggerimenti per miglioramenti ?
codice:
public class Test {
public static void main(String args[]) throws Exception {
Indirizzo indirizzo = new Indirizzo("via Rossi", "10", "Roma", "RM");
Persona pp = new Persona("rossi","carlo", indirizzo);
String a = "indirizzo.numeroCivico";
String[] percorso = a.split("\\.");
Object p = pp;
for(int i=0; i<percorso.length; i++){
Class tClass = p.getClass();
String perc = percorso[i].substring(0, 1).toUpperCase()
+ percorso[i].substring(1,percorso[i].length());
Method gs1Method = tClass.getMethod("get"+perc, new Class[] {});
Object ob1 = gs1Method.invoke(p, new Object[] {});
p = ob1;
}
String risultato = (String) p;
}
}
Ovviamente ho creato i due costruttori nelle classi Persona e Indirizzo per i test.