[RESOLVIDO] Problemas na referência de objetos

cara,
quando vc chama o metodo remove de uma collection passando um objeto como parametro. internamente vai ser verificado
se existe algum objeto igual ao passado como parametro. se existir ele vai ser removido. Como ele faz isso?
Chamando o metodo equals de cada objeto na collection passando o objeto recebido como parametro.
Agora a pergunta:
Como se sabe que 2 objetos telefone são iguais?
A jvm vai advinhar? user telepatia? :smiley:

Entao sua resposta esta no metodo equals.

[]´s

@nel
Realmente, provavelmente irá funcionar desta maneira. O problema é que eu não tenho como criar uma variável para cada número, já que eu não sei quantos números o cara vai adicionar. Eu não posso deixar isso dessa maneira estática.

Então eu uso a mesma variável e vou criando novos objetos pra ela a medida que o cara vai clicando em “Adicionar Telefone”, só que ai ta dando esse problema que, teoricamente, não era para acontecer.

Valeu!

@jgbt
É isso mesmo. hehehe!

O método equals está implementado, mas está implementado por um atributo que ainda não foi preenchido, já que ele é gerado somente quando persistido.

Então como o id sempre é nulo (até que seja persistido), todos os objetos são “iguais”, e acaba rolando esse problema.

Agora como eu vou fazer pra resolver isso (já que, pelo padrão da JPA, o hashCode e o equals tem que ser baseado no id), eu não faço idéia. Mas ai eu me viro. Pelo menos já deu pra descobrir o problema. hehehe!!!

Valeu, Galera! Brigadão mesmo!

Abraços!

Exactamente por isso perguntei. Se ele achava que eram iguais é porque tu de alguma forma estavas a dizer que eram iguais :slight_smile:
Infelizmente ele tem sempre razão

É verdade. hehehe! Por um momento, eu achei que ele pesquisasse o objeto usando o sinal de comparação mesmo:

objeto == objeto

Assim eu acredito que iria funcionar, pois, o JSF manda exatamente o mesmo objeto que está na lista, acredito eu.

Abraços!

Galera,

Vou deixar registrada aqui a idéia que eu tive pra resolver esse problema, caso alguém tenha o mesmo (estar usando JPA, JSF, e usar o equals somente para id, que ainda é nulo).


//variáveis só para exemplificar melhor
private List<Telefone> telefones = new ArrayList<Telefone>();
private Telefone telefone;

public void removeTelefone() {
	for (int i = 0; i < telefones.size(); i++) {
		if (telefone == telefones.get(i)) {
			telefones.remove(i);
		}
	}
	telefone = new Telefone();
}

Na tag “<f:setPropertyActionListener>” do JSF, ele manda exatamente o mesmo objeto, então permite você comparar dois objetos usando:

objeto == objeto

Sei que ficou meio gambiarra, mas foi a solução que me veio a cabeça por agora, hehehe!

Valeu a ajuda ae, Galera!!!

Abraços!!!