Newsgroup: it.comp.java
Titolo: Come posso creare degli array generici?

Ciao sapete dirmi come posso creare degli array di generici, meglio
dovrei creare una matrice di generici!
Grazie...

 dovrei creare una matrice di generici!
??
Un po' generico...


Object array[][] = new Object[10][10];
Ecco la tua matrice, piu' generica non puo' essere!
Non era la risposta che cercavi? sii piu' loquace!
-- 
SoulSpirit

 wrote:

Intendevo una cosa di questo genere : E[][] e = new E[3][3];
dove E è un tipo generico (java 5), tipo i templates in c++, e quando
creo un istanza della classe che contiene il generico gli passo il
tipo effettivo, solo che in questo modo il compilatore mi da errore!

 dove E è un tipo generico (java 5), tipo i templates in c++
I generics sono molto diversi dai templates.
Se non l'hai ancora letto questo documento e' molto utile:
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
 > quando creo un istanza della classe che contiene il generico gli
 > passo il tipo effettivo, solo che in questo modo il compilatore
 > mi da errore!
Dovresti dire come hai definito il generico E, per capire come mai ti 
restituisce un errore. E magari postare il trace dell'errore.
In ogni caso se vuoi usare i generics per gestire una matrice, dovresti 
creare un Vector di Vector di E.
Tradotto:
Vector<Vector<E>> matrice = new Vector<Vector<E>>();
Questo genera un vettore che accetta solo vettori di E.
Non sono sicuro che sia quello che stavi cercando...
Ciao,
Paolo

 dove E è un tipo generico
Tipo Vector[][] vv = new Vector[3][3] ?

 Intendevo una cosa di questo genere : E[][] e = new E[3][3];
Non illuderti. I generici sono (IMHO) veramente brutti. 
Capisco le ragioni per cui li hanno implementati in questa maniera, ma
questo non toglie che abituato ai templates del C++ li trovo
maledettamente poveri.
Tipicamente preferisco vederli come un workaraund attorno al fatto che
prima uno era costretto a castare a mano per usare i contenitori (cosa
veramente orribile) e poco più.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 veramente orribile) e poco piů.
Quel "poco piů" e' una garanzia di robustezza veramente comoda: Immagino 
che i ClassCastException siano diminuiti parecchio :)
Credo che alla SUN abbiano voluto facilitare la vita allo sviluppatore 
tenendo pero' in mente "KISS" ...

 tenendo pero' in mente "KISS" ...
Infatti. Ma il succo del mio discorso è che uno non deve vedere i
generics 'come i template del C++'. Sono features di classe diversa.
I templates introducono la programmazione 'generica' nel C++,
semplificando di molto la scrittura di determinato codice (a patto di
aggiungere un altro modo di fare certe cose).
I generics *no*. In Java non è tutt'ora possibile fare programmazione
generica completamente. Giò il fatto che sotto il naso sono ancora degli
Object, rende impossibile costruire un oggetto del tipo templatico
dentro il metodo.
La principale utilità dei generics è appunto relativa ai contenitori e
ad evitare appunto i ClassCastException non dovendo fare tutto a mano.


Pablo was Paolo ha scritto:

Si era proprio quello che cercavo, grazie mille x l'aiuto!!

 ad evitare appunto i ClassCastException non dovendo fare tutto a mano.
Forse e' il prezzo da pagare per la compatibilita' :/ ...
In ogni caso trovo i Generics una delle novita' piu' interessanti e 
utili di Java5 :)

 Si era proprio quello che cercavo, grazie mille x l'aiuto!!
Che orrore! Un vettore di vettori e' la peggior struttura dati che si 
possa usare (a parte il vettore di vettori di vettori ovviamente).
Per utilizzare strutture dati piu' complesse da quelle fornite dall'SDK, 
e' meglio crearsi un oggetto apposito.
Nel tuo caso, visto che ti serve una semplice matrice generalizzata, la 
puoi dichiarare cosi':
E[][] matrix = (E[][])new Object[10][10];
E cosi' ottieni una bella matrice 10x10 di oggetti generici di tipo E.
Purtroppo non puoi evitarti il warning del compilatore, non essendo 
possibile istanziare a runtime oggetti di tipo indefinito. Ma funziona, 
e se vai a vedere com'e' fatta la classe ArrayList vedrai che nel 
costruttore esegue qualcosa di molto simile.
-- 
SoulSpirit

 utili di Java5 :)
Indubbiamente. Senza per me si aggirava sulla cresta del demenziale
(tradotto: mi frantuma gli zebedei con una tipizzazione puntigliosissima
quasi dappertutto e poi per usare una collection mi fa fare le peggio
cose con il casting :P).
