[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Dúvida java - prototype



É isso mesmo. Clone é um negócio meio esquisito e meio mal feito, mas enfim.

Você deve invocar super.clone() para obter uma instância da classe
correta - eventualmente esse super.clone() atinge o método clone() de
Object, que faz lá uma magia negra para identificar quem foi o
"iniciador" da cadeia de chamadas. Se você não fizer isso e sua classe
não for final, você vai fazer com que todas as suas subclasses violem
o contrato, que diz que x.clone().getClass() == x.getClass().

Vale manter em mente que nenhum dos construtores que você define para
a classe são chamados quando o objeto é clonado, nem o construtor
padrão.

Abraços,

On 5/29/06, Mario Marques Jr <m:mariojr*gmail:com> wrote:
Bom, não li muita coisa do padrão Prototype para saber com certeza do
que se trata, mas em Java qualquer classe é derivada de Object, como
essa classe não deriva de nenhuma explicitamente, ela deriva
diretamente de Object.

Se você olhar na API do Java em:

http://java.sun.com/j2se/1.5.0/docs/api/

vai ver que Object tem um método clone(). É justamente esse método
invocado pelo  comando super.clone().

Mario.

On 5/29/06, Thiago Henrique <kalistek*gmail:com> wrote:
> No exemplo em Java pro padrão prototype do fluffycat.com, ele dá a seguinte
> classe:
>
> public abstract class AbstractFork implements Cloneable
>
> {
>  String forkName;
>
>  public void setForkName(String forkName) {
>  this.forkName = forkName;
>  }
>  public String getForkName() {
>  return this.forkName;
>  }
>
>  public Object clone()
>
>  {
>  Object object = null;
>  try {
>  object = super.clone();
>  } catch (CloneNotSupportedException exception) {
>  System.err.println("AbstractFork is not Cloneable");
>
>  }
>  return object;
>  }
> }
>
>
> Ok, minha dúvida é: a classe AbstractFork não parece ter sido derivada de
> nenhuma outra, como é que ela chama o super.clone() ? Quem vai ser este
> super e o que ele fará, exatamente, no método clone() ?
>
> []'s
> Thiago Henrique
>



--
Giuliano Mega <giuliano*ime:usp:br>