Novità introdotte da Java 5 (1.5) Tiger

La release Tiger del linguaggio di casa SUN è stata introdotta da un bel pò di tempo. Ciò nonostante molte persone ancora non si sono avvicinate alle novità che sono state introdotte. In questo articolo cerchiamo di vedere con degli esempi di codice come il mondo Java sta cambiando.

Java 5 ha introdotto diversi cambiamenti nel linguaggio che conosciamo. Oltre alle solite nuove classi che prima o poi incontreremo, alle performance migliorate e altre migliorie a destra e a manca, sono stati introdotti dei cambiamenti proprio nel linguaggio. Vediamo quindi cosa è in grado di fare Java grazie a partire da questa versione

Costrutto foreach

Quest costrutto sarà già conosciuto da chi è conosce linguaggi come il PHP e Perl. Praticamente è un evoluzione del semplice for e viene utilizzato nei casi in cui dobbiamo scorrere tutti gli elementi di una lista, array, collezione. Senza dover pensare ad incrementare variabili, definire quante volte il loop deve essere eseguito, utilizzando questo nuovo costrutto sappiamo che il codice verrà ripetuto per ogni elemento che abbiamo nella collezione. Vediamo quindi come utilizzarlo in Java 5.

Come potete vede dall’esempio noi abbiamo preso in considerazione un array di stringhe. Per stampare a schermo tutte queste stringhe utilizziamo il nuovo costrutto, che richiede nella parte prima dei due punti la definizione della variabile che sarà utilizzata nel for (in questo caso abbiamo un array di String quindi è una String) e dopo i due punti la collezione/array che dobbiamo scorrere. Semplice ed elegante. Ancora più semplice quando dobbiamo utilizzare delle Java Collection, dove non dobbiamo richiamare metodi per ottenere l’Iterator o quant’altro, ma dobbiamo semplicemente specificare quello che abbiamo precedentemente visto:

Generics

I “Generics” sono una caratteristica di molti altri linguaggi di programmazione. Ora sono disponibili anche in Java e per capire cosa sono partiamo da un esempio pratico.

Quando abbiamo degli oggetti in una qualsiasi Collection dobbiamo effettuare il cast nel momento in cui andiamo a estrarre questi oggetti per utilizzarli. Questo comportamento può chiaramente provocare degli errori a runtime, con il famoso ClassCastException. I Generics ci vengono in aiuto proprio per evitare situazioni del genere. Possono essere create delle collezioni che non permettono di inserire altri oggetti oltre al tipo generico specificato. In questo modo siamo sicuri che siano tutti oggetti di una certa classe e quindi non è più richiesto il cast. Inoltre anche la leggibilità del codice guadagna molto da questo modo di programmare.

Vediamo quindi come modificare il precedente esempio di codice utilizzando i Generics

Il fatto di poter utilizzare i Generics non risulta utile solo nelle collezioni, ma anche in altri casi. Scorrendo la documentazione javadoc di Java 5 potete trovare molte classi a cui è stato aggiunto il supporto per i Generics. A primo impatto potreste pensare “Ma non era meglio prima? Qui non ci si capisce niente!!!”, ed è normale. Però cominciando ad utilizzare librerie sviluppate in questo modo e addirittura incominciando a svilupparne voi capirete la praticità di questa tecnica in diversi casi comuni della programmazione. Qui di seguito trovate dei link dove potete approfondire questo discorso.

http://java.sun.com/docs/books/tutorial/java/javaOO/generics.html
http://www.deitel.com/articles/java_tutorials/20050909/IntroductionToJavaGenerics.html
http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
http://www-128.ibm.com/developerworks/edu/j-dw-java-generics-i.html
http://jcp.org/en/jsr/detail?id=14

Autoboxing

Quante volte, quando inserite degli tipi primitivi come int dentro una Collection dovete ricorrere alla classe Integer? Immagino tante volte perchè le Collection di Java supportano solo degli oggetti non dei tipi primitivi. Quindi ogni volta che dobbiamo avere una collezione di tipi primitivi dobbiamo passare le nostre informazioni dentro le classi che fanno da wrapper (boxing) e poi per utilizzarli riportarli ai tipi primitivi (unboxing). In Java 5 è stato automatizzato questo meccanismo. Praticamente quando abbiamo delle collezioni di Integer possiamo aggiungere degli int, senza avere nessuna eccezione e sopratutto senza dover passare per una classe wrapper temporanea. Allo stesso modo quando poi dobbiamo utilizzare questi int:

Enum

Le classiche enumerazioni del C/C++ ora sono presenti anche in Java. Però oltre al fatto di essere un tipo di dato enum, in Java hanno anche altre potenzialità come l’implementazione delle interfacce Comparable e Serializable e il fatto di avere un metodo values() che permette di ottenere un enumerazione sotto forma di array.

Maggiori approfondimenti:
http://jcp.org/en/jsr/detail?id=201

Variabili d’argomento

Come ben saprete quando vogliamo creare un metodo dobbiamo decidere quali sono le variabili che prenderà come argomento. Quindi se vogliamo realizzare un metodo che scrive una stringa dobbiamo scrivere i seguente codice:

Ora in Java 5 possiamo definire dei metodi che prendono come input un argomento di lunghezza variabile. Praticamente ci viene data la possibilità di scrivere codice che verrà richiamato in diverse maniere, con diversi parametri. Vediamo ad esempio come possiamo implementare in Java 5 un metodo che stampa tutte le stringhe che gli vengono passate

Static import

E’ possibile attraverso un import, avere a disposizione i membri statici di una classe

In questo modo nel codice dove abbiamo effettuato l’import statico possiamo riferirci direttamente al membro statico PIPPO

Riferimenti

http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html
http://www.clanproductions.com/java5.html

Lascia un commento

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