Java Generics Tutorial – Cosa sono i generici e come usarli?

Java Generics è una delle caratteristiche più importanti del linguaggio Java. L’idea alla base dei generici è abbastanza semplice, tuttavia, a volte risulta complessa a causa del passaggio dalla solita sintassi ad essa associata.

Lo scopo di questo tutorial è quello di farvi conoscere questo concetto utile di generici in modo facile da capire.

Ma prima di immergerci nei generici stessi, scopriamo perché i generici Java erano necessari in primo luogo.,

Funzione di Generics Java

Prima dell’introduzione di farmaci generici in Java 5, si potrebbe scrivere e compilare un frammento di codice come questo, senza buttare un errore o un avviso:

e ‘ possibile aggiungere valori di qualsiasi tipo in un elenco o in un’altra Raccolta Java senza dover dichiarare il tipo di dati che memorizza. Ma quando recuperi i valori dall’elenco, devi inviarlo esplicitamente a un determinato tipo.

Considera di scorrere l’elenco sopra.,

Consentire la creazione di una lista senza prima dichiarare il tipo di dati memorizzati, come abbiamo fatto, potrebbe comportare che i programmatori commettano errori come sopra il quale lancia ClassCastExceptions durante il runtime.

I generici sono stati introdotti per impedire ai programmatori di commettere tali errori.

Con i generici, è possibile dichiarare esplicitamente il tipo di dati che verrà memorizzato durante la creazione di una raccolta Java come mostrato nell’esempio seguente.,

Nota: è comunque possibile creare un oggetto di raccolta Java senza specificare il tipo di dati memorizzati, ma non è consigliabile.

Ora, non è possibile memorizzare erroneamente un numero intero in un elenco di tipi di stringa senza generare un errore in fase di compilazione. Questo assicura che il programma non incorrere in errori di runtime.

Lo scopo principale dell’introduzione dei generici in Java era evitare di incorrere inClassCastExceptions durante il runtime.

Creazione di generici Java

È possibile utilizzare generici per creare classi e metodi Java., Diamo un’occhiata agli esempi di come creare generici di ogni tipo.

Classe generica

Quando si crea una classe generica, il parametro type per la classe viene aggiunto alla fine del nome della classe all’interno di angle<> tra parentesi.

Qui, T è il parametro del tipo di dati. T,N eE sono alcune delle lettere utilizzate per i parametri del tipo di dati secondo le convenzioni Java.,

Nell’esempio precedente, è possibile passare un tipo di dati specifico durante la creazione di un oggetto Genericlass.

Non è possibile passare un tipo di dati primitivo al parametro tipo di dati quando si crea un oggetto classe generico. Solo i tipi di dati che estendono il tipo di oggetto possono essere passati come parametri di tipo.

Ad esempio:

Metodi generici

La creazione di metodi generici segue un modello simile alla creazione di classi generiche. È possibile implementare un metodo generico all’interno di una classe generica e uno non generico.,

Qui, è possibile passare un array di un tipo specifico per parametrizzare il metodo. Il metodo generico PrintItems() itera attraverso l’array passato e stampa gli elementi memorizzati proprio come un normale metodo Java.

Parametri di tipo limitato

Finora, le classi e i metodi generici che abbiamo creato sopra possono essere parametrizzati a qualsiasi tipo di dati diverso dai tipi primitivi. Ma cosa succede se volessimo limitare i tipi di dati che possono essere passati ai generici? È qui che entrano in gioco i parametri di tipo limitato.,

È possibile associare i tipi di dati accettati da una classe o un metodo generico specificando che dovrebbe essere una sottoclasse di un altro tipo di dati.

Ad esempio:

Qui, il UpperBoundedClass e UpperBoundedMethod può essere parametrizzato solo utilizzando sottotipi del List tipo di dati.

List il tipo di dati funge da limite superiore al parametro type. Se si tenta di utilizzare un tipo di dati che non è un sottotipo di List, verrà generato un errore in fase di compilazione.

I limiti non sono limitati alle sole classi., Puoi anche passare le interfacce. Estendere l’interfaccia significa, in questo caso, implementare l’interfaccia.

Un parametro può anche avere più limiti come mostra questo esempio.

Il tipo di dati che accetta deve essere una sottoclasse di classi Animali e mammiferi. Se uno di questi limiti è una classe, deve venire prima nella dichiarazione vincolata.

Nell’esempio precedente, se Mammal è una classe e Animal è un’interfaccia, Mammal deve venire prima come mostrato sopra. In caso contrario, il codice genera un errore in fase di compilazione.,

Jolly Java Generics

I jolly vengono utilizzati per trasmettere parametri di tipi generici ai metodi. A differenza di un metodo generico, qui, il parametro generico viene passato ai parametri accettati dal metodo, che è diverso dal parametro del tipo di dati di cui abbiamo discusso sopra. Un carattere jolly è rappresentato dal ? simbolo.

Il metodo precedenteprintItems() accetta elenchi di qualsiasi tipo di dati come parametro. Ciò impedisce ai programmatori di dover ripetere codici per elenchi di diversi tipi di dati, il che sarebbe il caso senza generici.,

Caratteri jolly limitati superiori

Se vogliamo limitare i tipi di dati memorizzati nell’elenco accettato dal metodo, possiamo usare caratteri jolly limitati.

Esempio:

printSubTypes() il metodo accetta solo le liste che memorizzano sottotipi di colore. Accetta un elenco di oggetti RedColor o BlueColor, ma non accetta un elenco di oggetti Animali. Questo perché l’animale non è un sottotipo di colore. Questo è un esempio di un carattere jolly con limite superiore.,

Caratteri jolly limitati inferiori

Allo stesso modo, se avessimo:

allora, il metodoprintSuperTypes() accetta solo elenchi che memorizzano tipi super della classe Dog. Accetterebbe un elenco di oggetti mammiferi o animali ma non un elenco di oggetti LabDog perché LabDog non è una superclasse di cane, ma una sottoclasse. Questo è un esempio di un carattere jolly con limite inferiore.

Conclusione

Java Generics è diventato una caratteristica che i programmatori non possono vivere senza dalla sua introduzione.

Questa popolarità è dovuta al suo impatto sul rendere la vita dei programmatori più facile., Oltre a impedire loro di commettere errori di codifica, l’uso di generici rende il codice meno ripetitivo. Hai notato come generalizza classi e metodi per evitare di dover ripetere il codice per diversi tipi di dati?

Avere una buona conoscenza dei generici è importante per diventare un esperto nella lingua. Quindi, applicare ciò che hai imparato in questo tutorial in codice pratico è il modo per andare avanti ora.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *