Newsgroup: it.comp.java
Titolo: Problema con arraylist di sottoclassi usando generics

Buongiorno a tutti,
ho un ArrayList statico chiamato "buffer" con molti oggetti.
Tutti appartengono a 3 classi (RicDataCrossElement, RicDataTassiElement, 
RicDataUpdElement) che sono figli della superclasse RicDataElement
Devo estrarre ogni oggetto dalla lista e fare alcune azioni a seconda della 
classe di appartenenza.
Nel codice seguente ho errori, potreste gentilmente provare a darci 
un'occhiata ?
Ovviamente sto anche facendo troppi next() e ogni volta vado all'elemento 
dopo, chiaramente � sbagliato !
//START CODE
...
public static ArrayList<RicDataElement> buffer;
...
Iterator<? extends RicDataElement> iter1 = buffer.iterator();
  while (iter1.hasNext())
   {
            if(iter1.next() instanceof RicDataCrossElement){
                          RicDataCrossElement crossElm=
(RicDataCrossElement )iter1.next();
            ...
                 }
            else if(iter1.next() instanceof RicDataTassiElement){
            RicDataTassiElement tassiElm=(RicDataTassiElement)
iter1.next();
                        ...
          }
                  else if(iter1.next() instanceof RicDataUpdElement){
            RicDataUpdElement updElm=(RicDataUpdElement)iter1.next
();
            ...
          }
     }
}
//END CODE
Grazie a tutti per qualsiasi suggerimento,
Alessandro 

il 21/05/2009 20.06, Scrive Alessandro 29534368:

   Iterator<RicDataElement> iter1 = buffer.iterator();
   while (iter1.hasNext()) {
    try {
     RicDataElement element = iter1.next();
     if(element  instanceof RicDataCrossElement) {
       RicDataCrossElement crossElm = (RicDataCrossElement )element;
       ...
     } else if (element  instanceof RicDataTassiElement) {
       RicDataTassiElement tassiElm=(RicDataTassiElement)element;
       ...
     } else if (element  instanceof RicDataUpdElement) {
       RicDataUpdElement updElm=(RicDataUpdElement)element;
       ...
     }
    } catch (Exception e) {
      e.printStackTrace();
    }
   }
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherA�ejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers v�o � merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'

 }
Questo codice molto probabilmente solleverà una NoSuchElementException, o 
sbaglio? Scusa ma l'indentazione del mio reader mi rende difficile la 
comprensione del tuo codice.

     if(element  instanceof RicDataCrossElement) {
Siamo sicuri che in questo modo "element" con "instanceof" venga visto con 
la sua classe di appartenenza nella lista e non come RicDataElement ossia la 
classe che hai usato per dichiarare l'oggetto element ???
In caso contrario sarebbe la soluzione ottimale ovviamente ...

 messaggionews:gv46pp$clq$1...@aioe.org...


il 21/05/2009 21.09, Scrive Alessandro 43829632:

Beh... si', ovviamente mi baso sulle tue ipotesi, ovvero che 
RicDataCrossElement extends RicDataElement, il try l'ho messo apposta 
per omettere gli eventuali casi in cui iter1.next(); non ritorni un tipo 
RicDataElement e quindi tirasse un  ClassCastException.


 RicDataElement e quindi tirasse un  ClassCastException.
Ottimo, funziona perfettamente.
Grazie 1000
Alessandro