CastException String to Long

4 respostas
A

Olá…
Estou com um problema de cast que não estou conseguindo resolver. Já dei uma lida no forum mas nada resolveu.
O problema pode ser resumido com o código abaixo:
eu preciso tratar uma estrutura de dados parecida com:

ArrayList dados = new ArrayList();		
// Alimenta as linhas de dados2
dados.add(new String[] {"111111", "SPPP", "10102004"});
dados.add(new String[] {"222222", "RJJJJ", "10102004"});
dados.add(new String[] {"323232", "RRRRN", "10102004"});
dados.add(new String[] {"353485", "R24J", "10102004"});
dados.add(new String[] {"0950984", "RN476", "10102004"});

O metodo que faze isso é parecido com:

public void metodoTratador(ArrayList dados){

   ClasseQueTrataDados tratar =  ClasseQueTrataDados();
   ArrayList allData = dados;
   Iterator iterar = allData.iterator();

while(iterar.hasNext()){	
   // imprimi o conteudo do primeiro resitro... 
  System.out.println(" conteudo do  data.get(0) "+(allData.get(0)));

  // o CastException  acontece logo de cara no no primeiro cast...
   tratar.setCampoId(Long.parseLong((String)(allData.get(0))));
   tratar.setCampoTipo((String) allData.get(1));
   tratar.setCampoData(new Date( (String)data.get(2)));
   }

O conteudo do primeiro registro (allData.get(0)) é:
conteudo do data.get(0) [Ljava.lang.String;@16925b0.
Não é acusado nehum erro de cast na compilação…

Tenho 3 perguntas que procuro por respostas:

1º Como fazer o cast corretamente?
2º A implementação do laço (while) está correto, ie, vai percorrer
adequadamente o Arraylist?
new Date(…) aparece com depreciado qual outro metodo q eu poderia usar pra converter uma string para um tipo data, mais especificamente, existe algum metodo da SimpleDateFormat que faça isso?
Desde já agradeço pela atenção…

4 Respostas

E

É o seguinte, me parece que você tá tentando converter para String uma informação que na verdade é String[], ou seja, converter para String um vetor de strings String[]… Sendo assim acho que vc deve fazer:

(allData.get(0)[0])

pra pegar o primeiro valor…
Dá uma tentada, de repente é isso ou algo nesse sentido…

A

Olá ebatista…
A sua solução faz muito sentido.

(allData.get(0)[0])

…mas o eclipse acusou :

The type of the expression must be an array type but it resolved to Object

Você me chamou a tenção para um problema, maior do que o anterior, senão a causa dele…
ie, acho que o meu erro está em percorrer a estrutura de dados criada com o ArrayList de String[]. :oops:
A tua solução me parecia correta pra resolver esse problemas mas quando deu errado fiquei preocupado!!! :!:
Deve haver uma maneira de percorrer essa estrutura, se você ou alguém mais souber por favor me ajudem…
mais uma vez agradeço…

Sami_Koivu

Olá,

O ebatista tem razão. Só que o sintaxe é um pouco mais complicado.

Aqui vai a minha sugestão para seu loop:

while(iterar.hasNext()) {
            String[] dados = (String[])iterar.next();
            tratar.setCampoId(Long.parseLong(dados[0]));
            tratar.setCampoTipo(dados[1]);
            tratar.setCampoData(new Date(dados[2]));
        }

E realmente você deveria usar a classe SimpleDateFormat.

Veja por ex. http://www.guj.com.br/posts/list/15967.java

[]s,
Sami

T

Como de costume, vou dar meus palpites.

Muita gente (principalmente quem veio do C++) acha que “cast” é algo mágico que serve para converter de qualquer coisa para qualquer coisa.

Nem em C++ é assim, na verdade, mas como a imagem do C++ é que basta fazer um cast para que alguma coisa seja magicamente convertida em outra coisa (envolvendo o uso mágico e automático de construtores, operadores etc.), as pessoas acham que Java também é assim.

Java não é C++ e mesmo C++ (o real) não é C++ (o mito).

Em Java não há uma classe Convert (como no C#) que converta qualquer coisa em qualquer coisa.

Normalmente há algumas rotinas como XXX.parseXXX ou XXX.valueOf, ou então construtores, ou então o NumberFormat ou DateFormat, mas não há um esquema unificado.

Portanto é necessário conhecer um pouco as classes, e saber quais são as principais rotinas que fazem as conversões.

Criado 21 de agosto de 2005
Ultima resposta 22 de ago. de 2005
Respostas 4
Participantes 4