Clone  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
jr.mg
JavaChild

Membro desde: 25/07/2006 22:39:04
Mensagens: 131
Offline

Estou com um problema com o clone que é o seguinte
Tenho um ArrayList<Pergunta>
Preciso alterar a resposta de uma pergunta em um determinada posicao do array e que nao seja alterado outra.Porem esta alterando. Veja o codigo de exemplo que fiz

public class Pergunta implements Cloneable {
private String pergunta;
private String resposta;

public Pergunta(String pergunta) {
this.pergunta = pergunta;
this.resposta = resposta;
}

public String getPergunta() {
return pergunta;
}

public void setPergunta(String pergunta) {
this.pergunta = pergunta;
}

public String getResposta() {
return resposta;
}

public void setResposta(String resposta) {
this.resposta = resposta;
}

}

public class TesteArrayClone {
public static void main(String[] args) {
new TesteArrayClone();
}
TesteArrayClone() {
ArrayList<Pergunta> perguntas = new ArrayList<Pergunta>();
perguntas.add(new Pergunta("PerguntaA"));
perguntas.add(new Pergunta("PerguntaB"));

ArrayList<Pergunta> clone = (ArrayList<Pergunta> perguntas.clone();
((Pergunta) clone.get(0)).setResposta("Resposta de A");

System.out.println(perguntas.get(0).getResposta()) // Saida = Resposta de A -Aqui nao deveria ter alterado.
System.out.println(clone.get(0).getResposta()) //Saida = Resposta de A

}
}

Não se se fiz o clone corretamente...Porem gostaria que me ajudassem

Desde ja agradeço


Júnior
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Dá uma olhada na documentação que você vai entender.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html#clone()

Att;

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
jr.mg
JavaChild

Membro desde: 25/07/2006 22:39:04
Mensagens: 131
Offline

Ok...e agora? Como faço para resolver

Júnior
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Implementa o clone poh....

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Na verdade eu acho que seria melhor você fazer assim.
Cria uma nova lista, e clona cada objeto da lista antiga adicionando na nova ,....

Fica melhorzin...

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

jr.mg wrote:Estou com um problema com o clone que é o seguinte
Tenho um ArrayList<Pergunta>
Preciso alterar a resposta de uma pergunta em um determinada posicao do array e que nao seja alterado outra.Porem esta alterando.


ArrayList ou qualquer outro collection não implementa clone. Ele simplesmente usa o clone de Object.
O clone de Objet é um shalow-clone , ou seja, ele cria uma outra instancia do objeto e seta todos os campos com a mesma referencia
do original. i.e. ele não clona os campos.

No caso particular das listas ele não clona os menbros da lista.

Para ter duas listas , com os mesmos objetos lá dentro mas em que precisa manipular uma em separado da outra crie um cópia (não um clone) uma copia é simples com collections, basta instanciar outro objeto e passar o primeiro como argumento.

Agora, se quer clonar os objetos dentro da lista, então tem que implementar clone à mão. Isso significa criar a sua propria lista que faça isso.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
Andre Brito
JWizard

Membro desde: 21/07/2007 17:44:31
Mensagens: 2485
Localização: Paraná
Offline

Você pode fazer um método clone retornar um objeto do tipo da classe


Isso é muito feio

Eu não consigo usar Cloneable

This message was edited 1 time. Last update was at 11/09/2008 18:16:35


Como organizar o GUJ.
Meu Twitter.
Meu blog.
Future proofing means making code easy to change, not trying to anticipate every possible way your code might need to change.
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team