Java Interface Cloneable?

2 respostas
javacolenable
X

Galera estou um pouco perdido na Interface Cloneable.

Fiz uma classe Pilha qualquer usando simples Vetor[]. No caso está assim:

Pilha<T> pilha = new Pilha<>();

estou usando o T na classe.

O problema é que para cada posição do vetor eu tenho uma outra classe, essa é uma simples classe com 2 atributo um String e um Boolean

  • Como eu poderia implementar o Cloneable nesse caso?

  • Quero copiar os valores de uma Pilha para outra?

2 Respostas

ViniGodoy

Depende. Você pode fazer uma shallow copy (cópia rasa) ou uma deep copy (cópia profunda). Se você for fazer uma cópia rasa, - copiar a estrutura da pilha, mas não seu conteúdo - geralmente basta fazer uma cópia do seu vetor e mover as referências. Por exemplo:

public Pilha<T> implements Cloneable {
     Object[] vetor;

     @Override
     public Pilha<T> clone() {
        Pilha<T> pilha = super.close();
         for (int = 0; i < vetor.length; i++) {
               pilha.vetor[i] = vetor[i];
         }
    }
}

Caso você queira fazer um cópia profunda - gerando uma cópia também dos objetos dentro da pilha - aí terá que chamar o clone dos elementos da pilha também. Nesse caso, observe que sua pilha terá que, necessariamente, possuir elementos clonáveis:

public Pilha<T extends Cloneable> implements Cloneable {
     Object[] vetor;

     @Override
     public Pilha<T> clone() {
        Pilha<T> pilha = super.close();
         for (int = 0; i < vetor.length; i++) {
               pilha.vetor[i] = vetor[i] == null ? null : vetor[i].clone();
         }
     }
}
X

ViniGodoy Obrigado mesmo cara, vou dar uma olhada melhor, principalmente no ’ deep copy ’ .Obrigado mesmo xD

Criado 12 de julho de 2016
Ultima resposta 13 de jul. de 2016
Respostas 2
Participantes 2