Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18

Discussione: Cast dinamico

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Continuo a non capire l'obiettivo: se pure riuscissi a costruire l'oggetto MiaClasse, cosa te ne fai, dato che non sai a priori quale metodo invocare e con quali parametri?
    Infatti se lo sapessi, potresti benissimo farti bastare la reflection.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da borras Visualizza il messaggio
    Continuo a non capire l'obiettivo: se pure riuscissi a costruire l'oggetto MiaClasse, cosa te ne fai, dato che non sai a priori quale metodo invocare e con quali parametri?
    Infatti se lo sapessi, potresti benissimo farti bastare la reflection.
    Cambia, perchè se avessi l'oggetto con cui richiamare i metodi e supponiamo che questo oggetto si chiami obj1 farei così:

    Codice PHP:
    obj1.getPosition().get(0).getCodArt(); 
    Con
    Codice PHP:
    Method met=obj1.getClass().getMethod("getPosition"); 
    non saprei come fare.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Se sai come si chiama il metodo puoi usare la reflection (e mi sa che già l'abbiamo detto )
    Supponendo che il metodo getPosition restituisca una lista di AltriOggetti, una volta ottenuto il metodo "met":
    codice:
    List<AltriOggetti> lista = (List)met.invoke(obj1,null);
    lista.get(0).getCordArt();
    Insomma, forse dovresti leggerti un po dei link postati.

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da borras Visualizza il messaggio
    Se sai come si chiama il metodo puoi usare la reflection (e mi sa che già l'abbiamo detto )
    Supponendo che il metodo getPosition restituisca una lista di AltriOggetti, una volta ottenuto il metodo "met":
    codice:
    List<AltriOggetti> lista = (List)met.invoke(obj1,null);
    lista.get(0).getCordArt();
    Insomma, forse dovresti leggerti un po dei link postati.
    No. Così non posso farlo.
    Non posso accedere ad "AltriOggetti" poichè è una classe definita in MiaClasse!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    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 ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    non saprei come fare.
    Nell'altra discussione ti avevo detto il giro da fare e ti avevo linkato il tutorial...
    http://forum.html.it/forum/showthrea...readid=2897377
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.