Java Interface Cloneable?

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?

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();
         }
     }
}

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