PDA

View Full Version : [Java]Warning Array dinamico


alby89
07-05-2009, 14:03
Ciao a tutti devo memorizzare in un array tutte le linee contenute in un file di testo.Non sapendo a priori il numero di linee contenute nel file, devo utilizzare un array dinamico(se avete altre idee esponetele:D ).
tutto bene, se non che quando compilo il mio .java mi da un warning:

LeggiLinee.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

questo è il codice:

List myArray=new ArrayList();
BufferedReader in=new BufferedReader(new FileReader("lista.txt"));
String linea;
while((linea=in.readLine())!=null)
myArray.add(new String(linea));

System.out.println("La lista dei file e': ");
for(int k=0;k<myArray.size();k++)
{
System.out.println(k+". "+myArray.get(k));
}

Come faccio ad eliminare questo warning?
Grazie

!k-0t1c!
07-05-2009, 14:08
Devi specificare il tipo di ArrayList (come generic) e quindi ArrayList<string>, nel tuo caso.
P.S.: assegnare una variabile all'interno di una condizione (sia di un if, sia di un ciclo) è universalmente considerata pratica da evitare.

wingman87
07-05-2009, 14:10
Hai già visto i Generics?
Per risolvere devi dichiarare l'ArrayList in questo modo:
List<String> myArray=new ArrayList<String>();

EDIT: ti hanno già risposto

alby89
07-05-2009, 16:51
grazie a entrambi!!!
riguardo all'assegnamento a una variabile all'interno di un ciclo, perchè è sconsigliato?spesso vedo questo tipo di assegnamento..

!k-0t1c!
07-05-2009, 17:18
grazie a entrambi!!!
riguardo all'assegnamento a una variabile all'interno di un ciclo, perchè è sconsigliato?spesso vedo questo tipo di assegnamento..
Leggibilità (chiarezza) e verificabilità.
Spesso diventa più ostico capire un frammento di codice che fa uso di questa forma sintattica, specie se la chiamata ha dei side effects (ad esempio nel caso di un file lo spostamento del file pointer etc).
Ogni linguaggio decente ha un compilatore che segnala questo tipo di cattivo uso. In Java l'hai già riscontrato, ma te lo posso mostrare anche in:

C/C++ - http://msdn.microsoft.com/en-us/library/7hw7c1he(VS.90).aspx
C# con FxCop

e sono certo che la lista potrebbe proseguire. Inoltre è una delle regole predefinite relative allo stile di programmazione inclusa nei prodotti Parasoft per l'analisi statica dei sorgenti.

banryu79
07-05-2009, 17:19
grazie a entrambi!!!
riguardo all'assegnamento a una variabile all'interno di un ciclo, perchè è sconsigliato?spesso vedo questo tipo di assegnamento..
Immagino che !k-0t1c! volesse metterti sull'avviso che in genere, qualora possibile, è auspicabile evitare di istanziare nuovi oggetti (new...) soprattutto se questi oggetti sono pesanti all'interno di cicli.

Nel tuo caso in questo ciclo:

while((linea=in.readLine())!=null)
myArray.add(new String(linea));


puoi passare 'linea' direttamente senza passarla al costruttore di String (perfettamente inutile e anzi potrebbe anche essere leggermente penalizzante in questo caso)


while((linea=in.readLine())!=null)
myArray.add(linea);

alby89
07-05-2009, 19:35
grazie mille dei consigli!