
Originariamente inviata da
playbasfa
No. Così non posso farlo.
Non posso accedere ad "AltriOggetti" poichè è una classe definita in MiaClasse!
Ok, allora ascolta, vediamo di chiarire.
Se vuoi invocare tramite reflection dei metodi su oggetti che ti "arrivano" da altre parti, come ho già detto prima, "qualcosa" devi sapere: o a livello di nomi (e/o convenzioni sui nomi o simile) o a livello di logica di introspezione che vuoi applicare in generale agli oggetti.
Quindi gli scenari potrebbero essere:
1) Sai dei nomi di metodi, es. "getPosition", sai (in questo caso è intuibile) che è un getter e restituisce qualcosa (potresti anche non sapere il tipo esatto). In tal caso si può fare. Se non vuoi usare direttamente le classi della reflection e magari hai bisogno di fare molte invocazioni, nessuno ti vieta di incapsulare il tutto in una apposita classe riutilizzabile, es. ObjectAccessor.
codice:
ObjectAccessor objacc1 = new ObjectAccessor(obj1);
Object res = objacc1.invoke("getXyz");
objacc1.invoke("setName", "Mario");
oppure con un altro design una classe es. MethodInvoker:
codice:
MethodInvoker invoker1 = new MethodInvoker(obj1, "getXyz");
Object res = invoker1.invoke();
MethodInvoker invoker2 = new MethodInvoker(obj1, "setName");
invoker2.invoke("Mario");
(nel primo caso modelli l'accesso all'oggetto in generale, non l'invocazione di un metodo mentre nel secondo caso modelli proprio l'invocazione di un metodo)
2) Non sai granché di preciso ma ad esempio ti basta una logica del tipo "dato l'oggetto, cerco tutti i metodi getter (quelli getQualcosa senza parametri) li invoco, ottengo dei valori e li stampo".
Questo è sensato e perfettamente fattibile.
3) Ci si basa su qualche "convenzione" (che puoi imporre tu o che è fornita dalle classi che originano gli oggetti). Es. tutti gli oggetti sai che hanno un getDescription(). Oppure se un oggetto fornisce una lista di altri oggetti lo fa "per convenzione" con un getListQualcosa() per esempio getListPersone() o getListLibri().
Dal momento che la tua problematica sappiamo che ha a che fare con classi generate da xsd tramite XJC, dubito che puoi avere (o imporre) convenzioni di questo tipo ... ma ho citato questo scenario giusto per completezza.
A questo punto le conclusioni: se non hai scenari di questo tipo (o eventuali varianti), allora ..... non vai da nessuna parte o perlomeno non molto lontano ....