Clone

6 respostas
J

Estou com um problema com o clone que é o seguinte
Tenho um ArrayList
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 perguntas = new ArrayList();

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

6 Respostas

nbluis

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;

J

Ok…e agora? Como faço para resolver

nbluis

Implementa o clone poh…

nbluis

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…

sergiotaborda

jr.mg:
Estou com um problema com o clone que é o seguinte
Tenho um ArrayList
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.

Andre_Brito

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

public Objeto clone() { return new Objeto(...); }

Isso é muito feio :x

Eu não consigo usar Cloneable :expressionless:

Criado 11 de setembro de 2008
Ultima resposta 11 de set. de 2008
Respostas 6
Participantes 4