9
votes

Clonage vs Instancitation d'une nouvelle classe

Clonage de bonne pratique dans ce cas? Comment le faire mieux? XXX


4 commentaires

' dans ce cas?' pouvez-vous l'élaborer


Dites-nous plus pourquoi vous devez cloner cet objet en premier lieu.


Parce que je veux terminer une collection contenant des modèles.


Question connexe: Stackoverflow.com/ Questions / 1106102 / ...


4 Réponses :


1
votes

i chose que c'est comme avec tout ce qui est dans la programmation: cela dépend de la spécificité de l'objet.

Essayez de faire un test vraiment rapide: Clone 100000 objets et instancie la même quantité d'objets et le temps de lecture combien de temps il faut (System.currenttimeInmilis ()). Souvent, le clone est plus rapide.

et rappelez-vous qu'avec le clone, il y a un problème - lors de l'ajout d'un nouveau champ, etc., vous devez modifier la méthode clone () également.


2 commentaires

Oh, modifiez la méthode du clone? Est-ce nécessaire? Je pensais que ceci est juste une méthode agissant comme un constructeur, ce qui n'est pas nécessaire.


Si vous n'êtes pas implémenter clone dans vos classes, vous obtiendrez un clonenotsupportedexception jeté lorsque vous l'appelez.



10
votes

3 commentaires

Vous pouvez également avoir des méthodes de copie partielle: Public withbar (String Newbar) {Retour Nouveau FOO (Newbar, this.baz); }


Vous voulez dire la méthode statique de l'usine et non la méthode d'usine, qui pourrait être confondue avec le motif de la méthode d'usine


Alors, il faut que l'on évite les prototypes?



2
votes

Vous pouvez utiliser un constructeur de copie au lieu d'implémenter Clonable , mais on dirait que vous avez une hiérarchie de classes Modelentry , vous utilisez donc le clone peut être la meilleure approche. Voir Cette question pour certains pointeurs sur ce qui ne va pas avec clonable


0 commentaires

0
votes

Clone n'est pas une bonne idée que de nombreux programmeurs sont d'accord.

C'est sujet d'erreur. Vous devez remplacer clone () soigneusement.Porgeting d'invoquer super.clone () est un bogue populaire.


0 commentaires