I GENERICS IN JAVA

INTRODUZIONE AI GENERICS

java-logo

I Generics sono classi, interface e metodi parametrici, detta così non è che sia subito immediata la comprensione. Lo sarà tra un po’ quando vedremo la prima classe generica.

Definizione

Classi, interface e metodi operano su tipo di dati parametrici, specificati convenzionalmente attraverso una lettera T, o altre che fanno da segnaposto a un Data Type qualunque di tipo Reference Type. Attraverso i Generics siamo in grado di progettare programmi molto più flessibili, partiamo subito con il codice.

UNA CLASSE GENERICA PARTE 1

Osserva questa classe.

MyClass

L’attributo privato è di tipo Object, e può accogliere sia istanze di Object e anche di qualsiasi altra classe, dato che come sai tutte le classi derivano da Object. Vediamo la classe di test.

Classe di Test

Dobbiamo fare dei cast in quanto Object deve essere portato prima a String poi a int. Modifichiamo il programma.

Error

UNA CLASSE GENERICA PARTE 2

Quella che vedi in figura è una classe generica.

Classe generica

Con MyGeneric abbiamo asserito che la classe è un Generics. T rappresenta un segnaposto per un tipo qualunque, purché non sia un tipo primitivo. Il segnaposto T sarà un Data Type specificato tra parentesi angolari da chi usa la classe generica. Vediamo la classe di test.

Esempio funzionante

In questa seconda versione non abbiamo avuto necessità di cast, e inoltre non vengono provocate eccezioni a runtime. Se proviamo ad eseguire l’operazione riportata in figura avremmo un errore di compilazione che ci segnala l’incompatibilità del tipo. È un errore di compilazione e non una eccezione a runtime, quindi sicuramente molto meglio di prima.

Errore

FORMA GENERALE DI UNA GENERIC CLASS

Vediamo la sintassi generale di una classe generica.

Sintassi generale

Apriamo delle parentesi angolari e forniamo uno o più segnaposti di tipo parametrico. Come detto il tipo parametrico è un segnaposto per un Data Type reale che però viene specificato di volta in volta quando andiamo ad istanziare la classe generica.

Sintassi generale

type-arg-list possiamo evitare di specificarlo in quanto il compilatore è in grado di inferire i tipi corretti. arg-list è la lista dei parametri che eventualmente verranno passati al costruttore se previsto.

TYPE PARAMETERS MULTIPLI

Vediamo una classe generica con due parametri.

Classe generica con due parametri

Vediamo la classe di test che implementa la classe generica.

Classe generica

Ricorda sempre che i tipi parametrici devono essere dei reference type e non dei tipi primitivi, il tipo booleano che stiamo passando è il Type Wrapper e non il tipo primitivo. Avremmo potuto decidere anche di passare lo stesso Data Type, ad esempio due stringhe.

Stesso data type

LINK AI POST PRECEDENTI

IL LINGUAGGIO JAVA

LINK AL CODICE SU GITHUB

GITHUB

ESECUZIONE DEL CODICE DI ESEMPIO

  • Scaricare il codice da GITHUB, lanciare il file JAR con il seguente comando in Visual Studio Code, posizionandosi nella directory contenente il JAR.

        java -jar –enable-preview CorsoJava.jar

  • Oppure mettere in esecuzione il main che si trova nel file CorsoJava.java.