Benvenuto Visitatore

Generics in java

Breve presentazione di una delle novità di java 1.5 (o 5.0 che dir si voglia).

Ho deciso di scrivere questa breve recensione in quanto ho visto che molte persone usano l’ultima versione di java (al momento in cui scrivo si tratta della jdk 5.0 update 4) senza sfruttarne la reale potenza.

brevissima digressione sulla versione di java. Eravate rimasti alla 1.4 e di colpo vi ritrovate ad avere per le mani la 5.0 e la cosa vi ha destabilizzato? no? vabbè chissenefrega, ve lo dico lo stesso.. per chi non lo sapesse la release di questa versione era in realtà 1.5, diventata poi 5.0 perchè si voleva evidenziare chiaramente l’enorme passo avanti compiuto da questa versione del Java Development Kit. Infatti questa piattaforma sfoggia una grande maturità e degli aiuti non indifferenti agli sviluppatori java.

Una delle molte caratteristiche del nuovo prodotto di casa Sun sono i Generics. Il loro utilizzo è contestualizzato soprattutto nei Container.
prendiamo per esempio un oggetto di tipo Vector. Esso è un contenitore di Object, normalmente, per cui se istanziamo un vector e gli aggiungiamo una nuova istanza di una ipotetica classe myObect abbiamo un vettore di dimensiione 1 con, come oggetto contenuto, una nuova istanza di MyObject.

Vector v = new Vector();
v.add(new MyObject());

Ma al momento in cui estraiamo l’oggetto dal vettore, abbiamo:
MyObject x = (MyObject)v.get(0);

Questo perchè il compilatore non sa che tipo di oggetti ci sono nel vettore, per cui quando estraiamo il primo elemento, lo vedrà come semplice Object, cioè la classe base della programmazione OO in java, ma non come istanza di MyObject. per cui, dal cast in poi, il compilatore riconoscerà che quella è un’istanza della classe che diciamo noi, per cui potremo usare tutti i metodi che abbiamo implementato in nella classe MyObject.

Il problema si pone quando, per errore, aggiungiamo al vettore un’istanza di un oggetto che non c’entra nulla con la classe MyObject..
v.add(new String(”asdasd”));

E fin qua nulla di male, ma credete che non darà eccezione a runtime nel momento in cui farete (MyObject)v.get(1);?

Ed ecco entrare in scena i generics:

Vector<MyObject> v = new Vector<MyObject>();

Ora v non solo è un Vector, ma è un simpaticissimo vettore di MyObject! per cui al momento in cui si estrae dalla lista un qualsiasi oggetto non ci sarà bisogno di effettuare nessun cast, perchè il compilatore saprà già che quell’oggetto è di tipo MyObject.. e darà invece errore al momento di inserire un oggetto di un altro tipo nel vector.. (a compile-time e non a runtime!)

Se usata opportunamente, questa sottile tecnica di programmazione vi semplificherà la vita (Ok, nel Vector si tratta di pochi cast, ma se fosse una HashMap?) !
E potrete dire che state usando java 5.0! E fa figo con le donne, fidatevi!


Tags: ,

Post Correlati:

  • Nessuno

Posta un Commento

La tua email non verrà pubblicata o resa visibile a terzi. I campi obbligatori sono contrassegnati da *

*
*