View Full Version : ...Java Reflection...
...avendo una classe di beans come è possibile visualizzare il contenuto di tutti i suoi elementi per mezzo della reflection?...
...grazie ciao...
...avendo una classe di beans come è possibile visualizzare il contenuto di tutti i suoi elementi per mezzo della reflection?...Avendo un oggetto Class, usi il metodo getMethods().
Le specifiche JavaBeans stabiliscono come denominare i metodi. Ci saranno quindi dei metodi con nome setXXX, getXXX (o eventualmente isXXX nel caso di proprietà boolean) e per i listener, addXXXListener/removeXXXListener.
A quel punto prendi in considerazione solo i metodi che sono validi secondo le specifiche. Se ad esempio hai una proprietà 'Name' di tipo String, i metodi set/get possono essere:
public void setName (String n)
public String getName ()
Usa Introspector (java.beans). Ti fai dare il BeanInfo:
BeanInfo info = Introspector.getBeanInfo(instance.getClass());
e sei a cavallo. Per leggere le proprietà leggi il BeanInfo, ad esempio in un ciclo:
for(PropertyDescriptor pd : info.getPropertyDescriptors()) {
String name = pd.getName();
Object value = pd.getReadMethod().invoke(instance);
}
Dietro le quinte fa quello che ha descritto andbin.
Usa Introspector (java.beans)Devo ammettere che non conosco questo package. :ops2:
Vedrò di colmare la lacuna.
Se ti facessi una lista di quelli che non conosco io finiremmo domattina :D
franksisca
31-07-2007, 22:36
Devo ammettere che non conosco questo package. :ops2:
Vedrò di colmare la lacuna.
Se ti facessi una lista di quelli che non conosco io finiremmo domattina :D
ciao modestia :D:D:D:D
nuovoUtente86
31-07-2007, 22:42
http://www.hwupgrade.it/forum/showthread.php?p=18132516#post18132516
se qualche moderatore vuole unire le discussioni.
Sono questioni diverse. Qui interessa più che la riflessione in sè una sua applicazione, che è per altro semplificata da uno strumento ad hoc. Diciamo che è sempre riflessione ma è applicabile solo in certi casi.
All'allegro "ciao modestia" di franksiska rispondo con un altrettanto allegro: qui bisogna volare non bassi ma rasoterra.
Una settimana scrivo una cosa e quella dopo scopro che c'è un altro modo per farla che è due volte più semplice, sicuro e standard. E questo da tempi ormai immemori. Insomma non è modestia, è realismo :cry:
franksisca
01-08-2007, 13:56
Una settimana scrivo una cosa e quella dopo scopro che c'è un altro modo per farla che è due volte più semplice, sicuro e standard. E questo da tempi ormai immemori. Insomma non è modestia, è realismo :cry:
modestia per modesti, io da esperienza personale posso sintetizzare così:
se non so una cosa vengo qua e tu (ti dò del tu) o altri me li risolvete, se io sò una cosa tu la risolvi tipicamente meglio.....:D
spero col tempo di acquistare abbastanza esperienza da poter reggere il confronto anche con quelli come te ;)
e comunque, grazie per le delucidazioni sempre impeccabili ;)
...ottimo grazie...ecco cosa ne è nato...
public static void main(String args[]){
Beans beans = new Beans();
beans.setIntero(1);
beans.setLungo(2);
beans.setStringa("3");
try {
BeanInfo info = Introspector.getBeanInfo(beans.getClass());
PropertyDescriptor[] pd = info.getPropertyDescriptors();
for(int i=0;i<pd.length;i++) {
Method name = pd[i].getReadMethod();
Object value = (Object)pd[i].getReadMethod().invoke(beans, null);
System.out.println(value);
}
} catch (Exception e) {
System.out.println(e);
}
}
...ciao...
invoke restituisce un Object. La conversione esplicita da Object a Object (esplicitamente prevista dalle specifiche del linguaggio per una ragione che non ho mai compreso) dovrebbe essere superflua.
(Object)pd[i].getReadMethod().invoke(beans, null);
invoke restituisce un Object. La conversione esplicita da Object a Object (esplicitamente prevista dalle specifiche del linguaggio per una ragione che non ho mai compreso) dovrebbe essere superflua.
(Object)pd[i].getReadMethod().invoke(beans, null);
...si si...è un avanzo di codice di debug....
...grazie ancora...
...ciao...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.