Clone

2 respostas
edymrex

Pra que serve o metódo clone ?

Bem eu acho que ele cria uma nova instância do objeto à qual estou clonando com as mesmas
características é isto mesmo ?

Eu sou obrigado implementar a interface Cloneable para usar o método clone …?

Vejam o exemplo que peguei no google:

abstract class Documento implements Cloneable {
 
        protected Documento clone() {
                Object clone = null;
                try {
                        clone = super.clone();
                } catch (CloneNotSupportedException ex) {
                        ex.printStackTrace();
                }
                return (Documento) clone;
        }
 
}
 
class ASCII extends Documento {
 
}
 
class PDF extends Documento {
 
}
 
class Cliente {
 
        static final int DOCUMENTO_TIPO_ASCII = 0;
 
        static final int DOCUMENTO_TIPO_PDF = 1;
 
        private Documento ascii = new ASCII();
 
        private Documento pdf = new PDF();
 
        public Documento criarDocumento(int tipo) {
                if (tipo == Cliente.DOCUMENTO_TIPO_ASCII) {
                        return ascii.clone();
                } else {
                        return pdf.clone();
                }
 
        }
}

2 Respostas

sergiotaborda

Puppets:
Pra que serve o metódo clone ?

Bem eu acho que ele cria uma nova instância do objeto à qual estou clonando com as mesmas
características é isto mesmo ?

Eu sou obrigado implementar a interface Cloneable para usar o método clone …?

Vc tem que implementar Cloneable para que o objeto possa ser clonado. Ou seja, para que .clone() seja visivel.
Só que .clone já é um método de Object. Só que ele é protected. Ou seja, ele já está implementado em certa medida.

Só que normalmente não é essa a medida que vc quer. E por isso vc tem que implementar Cloneable.
Mais sobre isso aqui

normalmente clone() é implementado através de um contrutor de clonagem/copia
assim

public class XPTO  implements Cloneable{
 
   private int a;
 
   public XPTO(){} //construtor normal.
   private XPTO(XPTO other){ // construtor de copia
          this.a = other.a;
  }

  public Object clone(){
       return new XPTO(this);
  }
}
edymrex

Cara vo dar uma lida no seu blog qualquer dúvida eu posto aqui. Obrigado.

Criado 23 de junho de 2008
Ultima resposta 23 de jun. de 2008
Respostas 2
Participantes 2