I GENERICS IN JAVA
BOUNDED TYPES
Per capire come si implementano i Bounded Types partiamo subito con un esempio. L’attributo t in figura è di tipo Object, come abbiamo visto nelle lezioni precedenti per trasformarlo in un Type Wrapper occorre usare il metodo intValue().
Se proviamo a compilare questa classe otteniamo un errore.
Non viene riconosciuto dal compilatore perché intValue() è un metodo della classe Number e noi stiamo lavorando con un tipo Object che sta ad un livello più alto, inoltre il metodo quadrato non è un vero metodo generico. Pensa se al posto di un int utilizziamo un boolean. Il problema viene risolto con una delimitazione dei tipi parametrici ammessi, ciò significa usare i Bounded Types.
Stiamo dicendo questo con <T extends Number>. Questa è una classe generica anche se generica fino a un certo punto. Infatti, il tipo parametrico T deve essere di tipo Number oppure di una sottoclasse del tipo Number. Scriviamo una classe di test per la verifica.
Per concludere osserviamo la figura. T accetta tutti i valori parametrici della superclasse specificata o di una sua sottoclasse.
METODI GENERICI
È possibile dichiarare un metodo generico in una classe non generica. Introduciamo la sintassi. Prima del tipo di ritorno occorre specificare la lista dei tipi parametrici che poi saranno inclusi nei parametri del metodo. Vediamo un esempio per chiarire la definizione riportata in figura.
L’esempio ritorna un double diviso per due.
Andiamo a scrivere la classe di test.
COSTRUTTORI GENERICI
Anche i costruttori di una classe non generica possono essere resi generici così come abbiamo visto per i metodi. Vediamo un costruttore generico.
INTERFACE GENERICHE
Introduciamo subito una interface generica. Se una classe implementa una interface generica, allora anche la classe dovrà essere generica, avere lo stesso numero di tipi parametrici che poi dovranno essere compatibili con quelli della interface.
Vediamo la classe di test.
Vediamo un esempio con un Bounded Types. Non è necessario ripetere il Bounded Types dopo la parola chiave implements in quanto il compilatore è in grado di inferire i giusti Types.
Al posto di Number nella definizione di classe possiamo usare un tipo compatibile come un Double.
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