Problemas com List e object

4 respostas
E

Pessoal, tenho o seguine:

Um metodo que recebe um objeto, que contem apenas um registro com varias colunas, por exemplo:
Object exemplo;
teste=exemplo.toString(); //objeto convertido p/ String p/ ver o conteudo

exemplo={campo1=valor1,campo2=valor2, campo3=valor3}

como eu faria pra retirar o valor1, valor2 e valor3?
obs. não me serve utilizar a substring pois o tamanho dos valores varia e em outra situação tinha o seguinte:
um list que era retornado de outro metodo e eu fazia assim:

exemplo2=rows.get(0).get(campo1).toString();
e o conteudo do exemplo2 era exatamente o que eu queria ou seja: valor1

eu já tentei na minha duvida sobre o objeto acima, tentar colocar o objeto em uma varivel do tipo list, só que quando faço o procedimento pra tentar tirar o texto que eu quero ele não da opção que eu tinha pra tirar valor de uma campo ou seja:

Objeto exemplo.get(0).get (a opção deste get não se refere a de um campo e sim pra uma classe)

Se vc conseguiu entender a duvida e acha que pode responder,
agradeço.

4 Respostas

ViniGodoy

Você pode colocar num List.

Existem duas formas de usar o list. A primeira é antes do Java 5.

//Criamos um objeto da sua classe
SuaClasse objeto = new SuaClasse();

//Criamos a lista
List suaLista = new ArrayList();
//Adicionamos o objeto na lista.
suaLista.add(objeto);

Tempos depois, na hora de usar o objeto dentro da lista:

SuaClasse objeto = (SuaClasse)lista.get(0); //Esse cast é importante objeto.seuMetodo();

Você deve ter esquecido o cast.

E tem a forma após o Java 5, onde você pode dizer o tipo de objeto que vai dentro da lista.

//Criamos um objeto da sua classe
SuaClasse objeto = new SuaClasse();

//Criamos a lista para objetos da sua classe
List<SuaClasse> suaLista = new ArrayList<SuaClasse>();
//Adicionamos o objeto na lista.
suaLista.add(objeto);

Tempos depois, na hora de o objeto dentro da lista:

lista.get(0).seuMetodo(); //Não é necessário o cast, pq ele sabe que os objetos são da SuaClasse!

O jeito que você está fazendo, de tentar dividir o resultado do toString() é desnecessariamente trabalhoso e muito sujeito a erros.

E

Então, vou explicar melhor a duvida e o problema:

1 - Tenho um dataTable que recebe um list de varias linhas e colunas, ai coloquei um popup no dataTable que qdo aberto o popup ele traz apenas uma das linhas com suas varias colunas e as informações são mostradas dentro de inputs ai coloquei um link dentro do popup que qdo clicado chama um metodo da minha classe enviando aquela linha em forma de objeto:

objeto: se transformarmos esse objeto pra String teriamos:
{campo1=valor1, campo2=valor2,campo3=valor3}

agora, como faria pra retirar desse objeto os valores: valor1,valor2 e valor 3

já tentei fazer o seguinte:

transformar esse objeto em um List

List testeList;

testeList.add(objeto);

testeList.get(0).get(campo1).toString();

só que isso não funcionou pois o segundo get se referencia a classes e nao a campos… entendeu a duvida?

e como eu disse em uma outra situação consegui tirar do List dessa forma:
testeList.get(0).get(campo1).toString();

metodo: rrr(){

List rows=(campo1=valor1, campo2=valor2)

}

e em outro metodo:

List rows=rrr();
rows.get(0).get(campo1).toString();

só que o contexto era outro, o list era enviado como parametro de um metodo pra outro, isso muda alguma coisa?

t+, mesmo assim agradeço ao ViniGodoy até o momento.

ViniGodoy

O que estou dizendo é: não transforme seu objeto em String. Não tem porque você fazer isso, só vai complicar o seu código.

Claro que é possível recortar sua String. Mas insisto para que você leia acima como usar a lista para trabalhar com objeto diretamente. É muito mais fácil. Você está esquecendo de fazer o cast do seu objeto para o tipo original, por isso não consegue usar os métodos dele.

Por exemplo:
List listaDeInteiros = new ArrayList();
Integer inteiro = new Integer(10); //Criamos um novo objeto
listaDeInteiros.add(inteiro);
Se fizermos agora:
System.out.println(listaDeInteiros.get(0).intValue());
Isso não vai funcionar. O java dirá que a classe object não tem o método intValue (embora a classe integer tenha). Como arrumamos o código para que funcione? Primeiro, temos que fazer um cast:
Integer numero = (Integer)listaDeInteiros.get(0); 
Depois usar o objeto obtido e convertido para o tipo certo:
System.out.println(numero.intValue()); //Agora sim, funciona!
Agora, se você ainda insistir em recortar seu objeto: Você tem a String
String exemplo = "exemplo={campo1=xyz, campo2=xyz, campo3=xyz}";

// 1. Primeiro passo, deixe somente o que está entre { }
exemplo = exemplo.substring(exemplo.indexOf("{")+1, exemplo.lastIndexOf("}"));

A variável exemplo agora deve valer:
"campo1=xyz, campo2=xyz, campo3=xyz"

//2. Elimine espaços e substitua a vígula pelo sinal de =
exemplo = exemplo.replaceAll(" ", "").replaceAll(",", "=^);

A variável exemplo agora vale:
campo1=xyz=campo2=xyz=campo3=xyz

// 3. A intenção era ter um separador comum. Agora, separamos cada elemento com um split:
String[] campos = exemplo.split("=");

Agora, você tem um vetor contendo:
{"campo1", "xyz", "campo2", "xyz", "campo3", "xyz"}

Agora trabalhe com esse vetor. Note que você terá que mexer nesse código sempre que alterar o objeto, seja incluindo um campo ou alterando seu tipo.

E TUDO ISSO pode ser eliminado se você usar a lista com o objeto direto, e não com a String dele.

E

ViniGodoy você ajudou bastante, era isso mesmo que eu precisava…
obrigado.

Criado 31 de março de 2007
Ultima resposta 1 de abr. de 2007
Respostas 4
Participantes 2