Arraylist retornando select

9 respostas
D
Ola, criei uma classe de clientes.
package sql;

		public class Clientes {
	public String cod;
	public String nome;
	
	}
e a segunda classe
package sql;
import java.util.ArrayList;
import java.util.List;

public class Addvetor {

	
	
	public static void main(String[] args) {
		
	
	Clientes cli2 = new Clientes();
	ArrayList <Clientes> cli = new ArrayList<Clientes>();
	
	// Aqui e minha duvida para popular o clientes *******
	
	cli2.cod="1";
	cli2.nome="Jose";
	
	cli.add(cli2);
	
	// adicionando mais um
	
	cli2.cod="2";
	cli2.nome="joao";
	
	cli.add(cli2);
	
	//System.out.print(cli2.nome);
	//System.out.print(cli2.nome);
	//System.out.print(cli.);
	
	for (int i = 0; i < cli.size(); i++) {  
        System.out.println(cli.get(i));  

    }  
	
	
	
}}

Isso esta me retornando isso

sql.Clientes@12dacd1
sql.Clientes@12dacd1

Nao era para retornar algo do tipo

1,jose
2,joao

?

Pois era isso que precisava, pois futuramente vou fazer esse arraylist ser alimetado por um select e essa classe vou enviar informacoes para o meu projeto flex

9 Respostas

marcelo.bellissimo

É porquê você não sobreescreveu o método “toString” da sua classe Cliente…

Explicando… quando você usa o System.out.println(), ele chama o método “toString()” do seu objeto, e caso você não tenha sobreescrito esse método, ele vai usar o método que existe na classe Object, que retorna essa coisa aí mesmo…

ViniGodoy

Eis um exemplo do toString sobrescrito:

public class Cliente {  
    public int cod;  
    public String nome;  

    @Override
    public String toString() {
       return String.format("%d,%s", cod, nome);    
    }
}

Alguns comentários:
1. Se código é um int, o tipo de dados deveria ser int e não String;
2. Os atributos deveriam ser privados e serem acessados por gets;
3. Para definir os atributos use o construtor ou setters (se os setters forem aplicáveis).
4. Dê o nome de classes no singular. Afinal, cada objeto representa apenas um único Cliente. O arrayList, sim, pode chamar-se clientes.

D

Entendi, mais eu ja especifiquei la que ela e string.

como teria que fazer entao ?

ViniGodoy

darkin000:
Entendi, mais eu ja especifiquei la que ela e string.

como teria que fazer entao ?

Lá aonde?

D

Vinny, realmente deu certo, so que olha so.

ele retornou 2 joao
heheh

2,joao
2,joao

Sabe o que pode ser?

E como teria que dar o get no caso, para substituir essa linha

cli2.cod=2;

marcelo.bellissimo

Voce adicionou duas vezes o mesmo objeto na lista, percebeu?

Tem que dar um new() antes de inserir outro Cliente na lista…

ViniGodoy

Veja:

package sql;
import java.util.List;
import java.util.ArrayList;

public class Addvetor {
   public static void main(String[] args) {
      //Dando nomes mais descritivos às variáveis
      List <Clientes> clientes = new ArrayList<Clientes>();
      Clientes cliente = new Clientes();	
      cliente.cod="1";
      cliente.nome="Jose";	
      clientes.add(cliente);
	
      // adicionando mais um	
      Cliente cliente2 = new Cliente(); //Criando um novo cliente
      cliente2.cod="2";
      cliente2.nome="joao";	
      clientes.add(cliente2);

      //Usando o for each. É equivalente ao seu for.
      for (Cliente cli : clientes) {
         System.out.println(cli);
      }
   }	
}
D
ViniGodoy:
Eis um exemplo do toString sobrescrito:
public class Cliente {  
    public int cod;  
    public String nome;  

    @Override
    public String toString() {
       return String.format("%d,%s", cod, nome);    
    }
}

Alguns comentários:
1. Se código é um int, o tipo de dados deveria ser int e não String;
2. Os atributos deveriam ser privados e serem acessados por gets;
3. Para definir os atributos use o construtor ou setters (se os setters forem aplicáveis).
4. Dê o nome de classes no singular. Afinal, cada objeto representa apenas um único Cliente. O arrayList, sim, pode chamar-se clientes.

Esse override realmente solucionou o problema.

Unico problema e que agora eu adicionei varios campos, antes era so codigo e nome como no exemplo, agora que tem enredero, cep etc etc, como devo fazer nessa parte?

pois o select esta sempre retornando so cod, nome.

@Override
    public String toString() {
       return String.format("%d,%s", cod, nome);
esmerick
É só você adicionar esses novos campos na sobrescrita do toString, assim:
@Override
    public String toString() {

       //colocar %s ou %d para cada campo com virgulas, e o nome do campo correspondente na mesma ordem ao lado.

       return String.format("%d,%s,%s,%s", cod, nome,endereco,cep); //obs: %s para Strings e %d para inteiros

boa sorte! ^^

Criado 1 de dezembro de 2010
Ultima resposta 6 de dez. de 2010
Respostas 9
Participantes 4