I GENERICS IN JAVA
INTRODUZIONE AI GENERICS
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.
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.
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.
Dobbiamo fare dei cast in quanto Object deve essere portato prima a String poi a int. Modifichiamo il programma.
UNA CLASSE GENERICA PARTE 2
Quella che vedi in figura è una 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.
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.
FORMA GENERALE DI UNA GENERIC CLASS
Vediamo la sintassi generale di una classe generica.
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.
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.
Vediamo la classe di test che implementa la 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.
LINK AI POST PRECEDENTI
LINK AL CODICE SU 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.
Scrivi un commento