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

Discussione: Metodi generici

  1. #1

    Metodi generici

    Ciao a tutti, sto studiando la programmazione generica, ma non riesco proprio a capire la sintassi e l'utilizzo dei metodi generici! Qualcuno mi spiega i tipi parametrici, i tipi di argomenti reali ecc... in poche parole tutto quello che c'e da sapere per poter programmare un metodo generico! Grazie in anticipo

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

    Re: Metodi generici

    Originariamente inviato da TrashcanDLM
    Ciao a tutti, sto studiando la programmazione generica, ma non riesco proprio a capire la sintassi e l'utilizzo dei metodi generici! Qualcuno mi spiega i tipi parametrici, i tipi di argomenti reali ecc... in poche parole tutto quello che c'e da sapere per poter programmare un metodo generico! Grazie in anticipo
    Il mio consiglio è: Java Generics and Collections - O'Reilly (io ce l'ho, è ottimo ... consigliatissimo!)

    E se vuoi c'è anche il capitolo 8 "Generics" gratuito del libro "Learning Java, Third Edition", qui: http://oreilly.com/catalog/learnjava3/chapter/

    P.S. se hai un esempio di metodo generico che non capisci o vorresti un esempio, chiedi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Metodi generici

    Originariamente inviato da andbin
    Il mio consiglio è: Java Generics and Collections - O'Reilly (io ce l'ho, è ottimo ... consigliatissimo!)

    E se vuoi c'è anche il capitolo 8 "Generics" gratuito del libro "Learning Java, Third Edition", qui: http://oreilly.com/catalog/learnjava3/chapter/

    P.S. se hai un esempio di metodo generico che non capisci o vorresti un esempio, chiedi.
    Ci ho provato a leggere, ma continuo a non capire come funzionano i metodi generici

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

    Re: Re: Re: Metodi generici

    Originariamente inviato da TrashcanDLM
    Ci ho provato a leggere, ma continuo a non capire come funzionano i metodi generici
    Leggi un momento la documentazione javadoc della classe java.util.Collections.
    Ci sono metodi come:

    public static <T> void fill(List<? super T> list, T obj)

    public static <T> void copy(List<? super T> dest, List<? extends T> src)

    Ti è chiara almeno la dichiarazione? Su cosa avresti dubbi in metodi come questi?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: Re: Re: Metodi generici

    Originariamente inviato da andbin
    Leggi un momento la documentazione javadoc della classe java.util.Collections.
    Ci sono metodi come:

    public static <T> void fill(List<? super T> list, T obj)

    public static <T> void copy(List<? super T> dest, List<? extends T> src)

    Ti è chiara almeno la dichiarazione? Su cosa avresti dubbi in metodi come questi?
    Quello che non capisco sono i tipi parametrici in pratica! Cosa rappresentano, che valori possono assumere ecc. Diciamo che le parentesi angolari mi confondono molto

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: Re: Re: Re: Metodi generici

    Originariamente inviato da TrashcanDLM
    Quello che non capisco sono i tipi parametrici in pratica! Cosa rappresentano, che valori possono assumere ecc. Diciamo che le parentesi angolari mi confondono molto
    In genere T (o U, V, o quello che è, il nome non è importante) può essere un tipo qualsiasi!

    codice:
    List<Integer> listaInteri = new ArrayList<Integer>();
    List<Studente> listaStudenti = new ArrayList<Studente>();
    List<Double> listaDouble = new ArrayList<Double>();
    Puoi ovviamente mettere dei vincoli. Ad esempio se scrivi un metodo di ordinamento "generico" che ordina una lista di T, puoi specificare che T sia un Comparable, per assicurarti che sia possibile effettuare il confronto...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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

    Re: Re: Re: Re: Re: Metodi generici

    Originariamente inviato da TrashcanDLM
    Quello che non capisco sono i tipi parametrici in pratica! Cosa rappresentano, che valori possono assumere ecc. Diciamo che le parentesi angolari mi confondono molto
    Ok, partiamo dalla base:

    - String è un Object
    - String[] è un Object[]
    ma
    - List<String> non è un List<Object>

    Quest'ultimo punto ti è chiaro? È assolutamente la "base" dei generics.

    I generics permettono di creare tipi (classi, interfacce) "generici" e metodi "generici".

    Ecco un esempio di classe generica: voglio creare una classe che contiene una coppia di valori dello stesso tipo (due String o due Integer, ecc...) con i relativi metodi getter/setter (in effetti non farebbe molto altro).
    Prima di Java 5, avresti dovuto fare CoppiaString, CoppiaInteger, ecc... con una struttura sostanzialmente uguale, cambiando solo i tipi delle due variabili di istanza e i parametri e tipi di ritorno dei setter/getter.

    Con i generics puoi fare:

    codice:
    public class Coppia<E> {
        private E primo;
        private E secondo;
    
        public E getPrimo() {
            return primo;
        }
    
        public void setPrimo(E primo) {
            this.primo = primo;
        }
    
        public E getSecondo() {
            return secondo;
        }
    
        public void setSecondo(E secondo) {
            this.secondo = secondo;
        }
    }
    Quel E tra <> si chiama type variable ed è una specie di "segnaposto". Non è un tipo reale (non c'è, e non serve che esista, una classe/interfaccia chiamata E !).
    Quando la classe viene compilata, avviene il processo chiamato "erasure". Ad esempio le variabili di istanza devono diventare di un tipo reale ... E non esiste!
    Secondo le regole, una semplice type variable come E, per erasure diventa Object. Quindi le due variabili di istanza, a runtime sono degli Object.

    Ma i generics sono controllati in fase di compilazione. Se in un tuo sorgente fai:

    Coppia<String> coppiaStr = new Coppia<String>();

    Questa è una concrete type instantiation, riferita a ciò che c'è tra <>. Qui c'è un tipo reale, String. E per il compilatore quei E sono String quando viene usata la variabile coppiaStr es.:

    coppiaStr.setPrimo("ciao"); // ok

    e il compilatore rifiuterà qualunque altra cosa es.:

    coppiaStr.setPrimo(123); // errore
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Grazie mille, credo di aver capito! Ma E puó rappresentare tipi di variabili primitivi?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TrashcanDLM
    Ma E puó rappresentare tipi di variabili primitivi?
    No, appunto questo è il limite dei generics: solo tipi reference.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Originariamente inviato da andbin
    No, appunto questo è il limite dei generics: solo tipi reference.
    Almeno ora mi è tutto perfettamente chiaro, grazie mille

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.