Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Cast dinamico

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327

    Cast dinamico

    Buongiorno ragazzi, ho un problemino.

    Codice PHP:
    Object obj1 metodo(Stringa); 
    Il metodo restituisce un oggetto generico.
    Io vorrei accedere ai metodi specifici dell'oggetto generico.
    Il problema è che non posso fare il cast dell'oggetto generico a quello specifico perchè l'oggetto specifico viene scelto a runtime, dunque dovrei fare una sorta di cast dinamico.

    Avete qualche idea?
    Grazie in anticipo per l'aiuto!

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Potresti fare una serie di "instanceof" per determinare il tipo di oggetto con cui hai a che fare..


  3. #3
    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
    Il problema è che non posso fare il cast dell'oggetto generico a quello specifico perchè l'oggetto specifico viene scelto a runtime, dunque dovrei fare una sorta di cast dinamico.
    Se tutti i possibili tipi di oggetti restituiti hanno un tipo in comune (super-classe comune o una interfaccia comune) e a te basta accedere agli oggetti attraverso questa "astrazione" ... allora fai il cast al tipo comune.

    Altrimenti come dice zipangulu, puoi fare dei test con l'operatore instanceof.

    Però mentre il primo scenario è in linea con la filosofia object-oriented .... il secondo lo è molto di meno (oltre che essere meno bello).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Conosci già l'insieme di classi da scegliere a runtime? Sono classi che crei tu?
    Se si, possono estendere tutte una stessa interfaccia?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Grazie per le risposte.
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se tutti i possibili tipi di oggetti restituiti hanno un tipo in comune (super-classe comune o una interfaccia comune) e a te basta accedere agli oggetti attraverso questa "astrazione" ... allora fai il cast al tipo comune.
    Non è questo il caso..

    Conosci già l'insieme di classi da scegliere a runtime? Sono classi che crei tu?
    Queste classi vengono aggiunte (già compilate) dall'esterno, durante il run del programma.
    Motivo per cui non posso conoscere a priori quale classe devo adoperare ma solo a runtime, da qui l'esigenza di farlo dinamicamente.

    Per quanto riguarda instanceOf, sto leggendo la documentazione.

    Io vorrei fare una cosa del genere
    Codice PHP:
    MiaClasse obj1 =(MiaClassemetodo(Stringa); 
    dove MiaClasse è determinata a runtime e non posso conoscerla a priori.

    Attualmente ciò che sono riuscito a fare è:
    Codice PHP:
    Object obj1 metodo(Stringa);
    Method met=obj1.getClass().getMethod("getPosition");
    Object m met.invoke(obj1); 
    Io vorrei invece avere accesso a tutti i possibili metodi, non solo a getPosition.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Da una classe puoi avere l'elenco dei metodi associati tramite getMethods()
    Non ho capito un'altra cosa: come fai a dire che non conosci quale classe viene caricata a runtime ma sai quale metodo invocare?

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da borras Visualizza il messaggio
    Da una classe puoi avere l'elenco dei metodi associati tramite getMethods()
    Non ho capito un'altra cosa: come fai a dire che non conosci quale classe viene caricata a runtime ma sai quale metodo invocare?

    Mi sono spiegato male.
    Non conosco nemmeno i metodi, quello che vedi lì era per fare una prova.

  8. #8
    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
    Queste classi vengono aggiunte (già compilate) dall'esterno, durante il run del programma.
    Motivo per cui non posso conoscere a priori quale classe devo adoperare ma solo a runtime, da qui l'esigenza di farlo dinamicamente.
    Quindi sei tuttora nella problematica di quelle classi generate "programmaticamente" con XJC (dico bene?)
    Stai notando come, solamente perché hai girato la cosa tutta sul lato "dinamico", ti stai un po' mettendo i "bastoni" tra le ruote da solo e stai complicando il tutto?

    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    Io vorrei invece avere accesso a tutti i possibili metodi, non solo a getPosition.

    Non conosco nemmeno i metodi, quello che vedi lì era per fare una prova.
    Con la reflection puoi fare (praticamente quasi) tutto. Sapere quali membri ha una classe, sapere quali metodi ha, quanti/quali parametri (come tipi) e tipo di ritorno ha ciascun metodo, invocare metodi, ecc...

    Ma purtroppo "qualcosa" devi sapere: o come nomi o come concetto di ricerca/introspezione da applicare agli oggetti.
    Ultima modifica di andbin; 16-10-2013 a 15:53
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    Mi sono spiegato male.
    Non conosco nemmeno i metodi, quello che vedi lì era per fare una prova.
    playbasfa, come ti è già stato detto, per fare questo ti serve utilizzare la Reflection ti è stato dato anche il link del tutorial ufficiale dell'oracle.... Qual'è il vero probleama ?

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Quindi sei tuttora nella problematica di quelle classi generate "programmaticamente" con XJC (dico bene?)
    Stai notando come, solamente perché hai girato la cosa tutta sul lato "dinamico", ti stai un po' mettendo i "bastoni" tra le ruote da solo e stai complicando il tutto?

    Con la reflection puoi fare (praticamente quasi) tutto. Sapere quali membri ha una classe, sapere quali metodi ha, quanti/quali parametri (come tipi) e tipo di ritorno ha ciascun metodo, invocare metodi, ecc...

    Ma purtroppo "qualcosa" devi sapere: o come nomi o come concetto di ricerca/introspezione da applicare agli oggetti.
    Si sono ancora lì, so che mi sto complicando le cose ma costi quel che costi voglio riuscirci.
    Il mio obiettivo è diventato riuscire a fare questa cosa anche se mi dovesse costare tanto tempo.

    Francesco, cosa intendi dicendo qual'è il vero problema?
    Ho letto approfonditamente la documentazione, qui il problema è diverso!

    Io ho un metodo che mi torna un oggetto specifico che però non può essere assegnato a un oggetto di tipo specifico ma solo a un oggetto generico di tipo Object.

    Dunque io faccio
    Codice PHP:
     Object obj1 metodo (Stringa); 
    ma tramite obj non posso richiamare i vari metodi perchè obj1 è un oggetto di tipo generico.
    Mi basterebbe fare il cast all'oggetto speicifico in questo modo
    Codice PHP:
     MiaClasse obj1 = (MiaClassemetodo (Stringa
    Il problema è che a runtime io posso acquisire l'informazione che MiaClasse si chiama MiaClasse ma che non so come fare questo casting dinamico.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.