Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    27

    [Java] Conoscere il generics di una Collection a runtime

    Salve a tutti,

    sto lavorando ad un progetto, e mi serve sapere il tipo di alcune variabili a tempo di esecuzione. Il porblema è sorto quando cerco di capire il tipo generics contenuto all'interno di una Collection java.
    Se ho ad esempio una variabile

    List<CC> lista=new ArrayList<CC>();

    in un'alra parte del codice, avrei bisogno di sapere la CC che tipo è.

    Io ho provato a fare in questo modo:

    ((ParameterizedType) lista.getClass().getGenericSuperclass()).getActual TypeArguments()[0]);

    ma come tipo mi da "E"

    ciao ciao

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [Java] Conoscere il generics di una Collection a runtime

    Originariamente inviato da onofvv
    e mi serve sapere il tipo di alcune variabili a tempo di esecuzione.

    Io ho provato a fare in questo modo:

    ((ParameterizedType) lista.getClass().getGenericSuperclass()).getActual TypeArguments()[0]);

    ma come tipo mi da "E"
    A runtime non puoi sapere come è stata parametrizzata la classe realmente nel sorgente. Detto in altro modo, a runtime non c'è nulla dentro l'oggetto ArrayList che dica che gli oggetti sono di tipo CC piuttosto che altro.

    Puoi sapere quali/quante sono le "type variable", "E" per ArrayList o ad esempio che ci sono 2 type variable K e V per HashMap.


    P.S. Di questo ringrazia la "erasure", la tecnica con cui sono stati implementati i generics.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    27
    mi stai dando una brutta notiziaaaaa dovrò inventarmi qualcos'altro

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    Re: [Java] Conoscere il generics di una Collection a runtime

    Originariamente inviato da onofvv
    Salve a tutti,

    sto lavorando ad un progetto, e mi serve sapere il tipo di alcune variabili a tempo di esecuzione. Il porblema è sorto quando cerco di capire il tipo generics contenuto all'interno di una Collection java.
    Se ho ad esempio una variabile

    List<CC> lista=new ArrayList<CC>();

    in un'alra parte del codice, avrei bisogno di sapere la CC che tipo è.

    Io ho provato a fare in questo modo:

    ((ParameterizedType) lista.getClass().getGenericSuperclass()).getActual TypeArguments()[0]);

    ma come tipo mi da "E"

    ciao ciao
    Ma il tuo scopo è di conoscere se la collection che "memorizza" CC è un vector, piuttosto che una map o un arraylist?
    al volante son nervoso

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    27
    no, il mio scopo è capire che tipo di dati vengono memorizzati nella collection, mi serve capire di che tipo è CC a runtime

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da onofvv
    no, il mio scopo è capire che tipo di dati vengono memorizzati nella collection, mi serve capire di che tipo è CC a runtime
    Allora vediamo di chiarire in modo definitivo:

    In un sorgente metto:

    ArrayList<Integer> listaInteri = new ArrayList<Integer>();

    A runtime, nell'oggetto ArrayList non c'è scritto da alcuna parte che la collezione è stata parametrizzata per contenere solo dei Integer.
    Per via della "erasure", le collezioni "sanno" di dover trattare solo degli Object e basta.

    Puoi prendere i singoli elementi contenuti nella collezione e ottenerne il Class. Ma questo non dice nulla sulla parametrizzazione.

    Potresti avere un

    ArrayList<Number> listaInteri = new ArrayList<Number>();

    e la collezione potrebbe contenere oggetti Integer, Double, Long ecc... (ciò che è-un Number). Ma non puoi sapere/determinare a runtime che è stata parametrata con Number.

    E credo di non dover dire altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da onofvv
    no, il mio scopo è capire che tipo di dati vengono memorizzati nella collection, mi serve capire di che tipo è CC a runtime
    Nel tuo codice non dovresti averne bisogno: se definisci una variabile di tipo Vector<Classe1>, allora in fase di design sai che è Classe1.

    Comunque se hai una collection, ne ritorni un elemento, invochi su quello il getClass e ti da la classe, non avrai una stringa "pulita", ma l'ultima parte, dopo $ o punti vari, è la classe che ti interessa... o sbaglio?
    al volante son nervoso

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    347
    potresti aggiungere qualche informazione in più sul "tuo" oggetto CC

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    27
    purtroppo per me ha ragione andbin, ed ha spiegato chiaramente il perchè, lo ringrazio per le info. Della parametrizzazione di collection e di altri oggetti non si ha traccia a runtime(che pacco ). Per il resto ringrazio tutti quanti si siano interessati al mio problema ciauuuuzzzz

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da onofvv
    purtroppo per me ha ragione andbin, ed ha spiegato chiaramente il perchè, lo ringrazio per le info. Della parametrizzazione di collection e di altri oggetti non si ha traccia a runtime(che pacco ). Per il resto ringrazio tutti quanti si siano interessati al mio problema ciauuuuzzzz
    Spiegami che intendi per parametrizzazione.
    Dato un List<CC>, a runtime vuoi ottenere l'informazione che la classe del generics è CC?
    al volante son nervoso

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