Pessoal,
estou tentando compilar um código que possui o trecho abaixo:
[code]List listaArq = new ArrayList();
try{
FileInputStream fis = new FileInputStream(“first.init”);
ObjectInputStream ois = new ObjectInputStream(fis);
// Read object.
listaArq = (ArrayList<String>) ois.readObject();
…[/code]
Ele me dá um warning:
warning: [unchecked] unchecked cast
found : java.lang.Object
required: java.util.ArrayList<java.lang.String>
listaArq = (ArrayList<String>) ois.readObject();
Estou curioso sobre o porquê desse warning ?
Como fazer esse cast corretamente.
Valeu pessoal :thumbup:
Bom, quando você usa ObjectInputStream, pode estar vindo qualquer coisa do ObjectInputStream (até um ArrayList<Integer>). Por isso é que o compilador reclama, porque você aí está abrindo um buraco nas condições de segurança do generics. É que se vir um ArrayList<Integer>, não dá ClassCastException NESSE ponto, mas mais tarde (o que é muito chato :mrgreen: , quando você for usar os elementos do ArrayList. )
O cast nesse caso vai sempre dar warning porque você está forçando um pino quadrado num buraco redondo (pode ser que o pino seja menor que o buraco e tudo dê certo )
Há duas formas de resolver isso:
a) Se você estivesse usando o Java 6, ou se não me engano o compilador do Eclipse 3.1, você pode usar a “annotation” @SuppressWarnings (“unchecked”) no seu método (infelizmente no compilador do Java 5.0 da Sun o @SuppressWarnings não suprime ainda os warnings. Que pena…)
b) Deixar como está - como eu disse, você se compromete a fazer com que o pino seja menor que o buraco…
thingol,
com base no que você disse resolvi fazer um teste. mudei o código para o que está abaixo para ver se o warning sumia, e ele sumiu (como era previsto pelo que vc tinha escrito).
[code]List listaArq = new ArrayList();
try{
FileInputStream fis = new FileInputStream(“first.init”);
ObjectInputStream ois = new ObjectInputStream(fis);
// Read object.
listaArq = (ArrayList) ois.readObject();
…[/code]
Obrigado pela informação,
:thumbup:
Eu recomendaria deixar o seu programa com warnings mesmo, porque é melhor (em 99% do tempo) usar o ArrayList < String > em vez de usar o ArrayList normal.
Não fique tirando o warning porque lhe incomoda - é o “Zen” da programação: você pode até usar “goto”, mas só se você souber o que está fazendo.
thingol,
na verdade fiz apenas como teste.