Dans Scala, est-ce que AnyRef.clone
effectue une copie peu profonde ou profonde?Est-ce que Scala AnyRef.clone effectue une copie peu profonde ou profonde?
Répondre
Réponse courte: peu profonde.
pas si courte réponse: moins qu'il ne soit remplacé, AnyRef.clone() utilise comme sa mise en œuvre Object.clone() de Java.
Javadoc sur Object.clone():
Le clone procédé pour la classe d'objets effectue une opération de clonage spécifique. Tout d'abord, si la classe de cet objet n'implémente pas l'interface Cloneable, alors une exception CloneNotSupportedException est levée. Notez que tous les tableaux sont considérés comme implémenter l'interface Cloneable. Sinon, cette méthode crée une nouvelle instance de la classe de cet objet et initialise tous ses champs avec exactement le contenu des champs correspondants de cet objet, comme par cession; le contenu de les champs ne sont pas eux-mêmes clonés. Ainsi, cette méthode exécute une "copie peu profonde" de cet objet, et non une opération de "copie profonde ".
S'il vous plaît noter:
- AnyRef.clone(), comme son homologue en Java, a un "protégé" niveau d'accès, de sorte que son ne appelable de partout.
- Vous devrez implémenter Cloneable pour que clone() fonctionne.
Réponse longue: Lire Effective Java, 2e édition, point 11: Remplacer clone judicieusement
Résumé: Ne pas utiliser. Il y a de meilleures alternatives.
- 1. Types de référence de copie profonde
- 2. Reliure profonde dans Flex
- 3. Objet de copie profonde LINQ to SQL avec dépendances
- 4. Liaison profonde dans JavaFX
- 5. env.Clone() dans scons ne fait pas de copie profonde
- 6. Comment créer une collection profonde non modifiable?
- 7. Liaison profonde XBAP. Menaces de sécurité possibles?
- 8. Propriétés du bean Java à initialisation profonde
- 9. Comment faire une copie profonde de l'objet JAXB comme xmlbean XmlObject.copy()?
- 10. Y a-t-il une charge profonde en subsonique?
- 11. Comment vérifier si une valeur de matrice profonde est présente
- 12. Stack déborde de la récursivité profonde dans Java?
- 13. Comment est-ce que j'écrirais cette requête mysql profonde à 3 niveaux?
- 14. constructeur Copie: copie en profondeur une classe abstraite
- 15. effectue une copie du contenu d'un tableau à une autre cause d'une fuite de mémoire
- 16. Quelle est votre compréhension profonde du pointeur, de la référence et du Handle en C, C++ et Java?
- 17. Paramètres de fonction: Copie ou pointeur?
- 18. Est-ce que VB.NET effectue un multithreading seul?
- 19. Comment faire une copie en profondeur d'un élément dans LINQ to XML?
- 20. Scala syntaxe de point (ou son absence)
- 21. La copie systeme() échoue, alors que la copie cmd fonctionne
- 22. Est-ce que ma machine AMD utilise peu endian ou big endian?
- 23. Est-ce que les événements de liaison dans jQuery sont très coûteux ou très peu coûteux?
- 24. IIS ou ASP.NET effectue-t-il une sorte de limitation de la connexion?
- 25. Compréhensions de Scala: caractéristique vitale ou sucre syntaxique?
- 26. Procédure stockée Réplication ou copie (SQL Server)
- 27. Est-ce que NSArray copie des objets?
- 28. Scala - replaceAllIn
- 29. Comment utiliser ActiveResource avec des itinéraires imbriqués peu profonds?
- 30. Un peu d'aide sur une expression mod_rewrite
"Il existe de meilleures alternatives." Pourriez-vous en référencer quelques-unes? –
1. Constructeur de copie, par C++. 2. Classe de cas avec méthode "copie" intégrée dans Scala 2.8.x. 3. Utilisez des objets immuables: pas besoin de copier, juste partager. –
Donc les constructeurs de copie de type C++ sont en fait (en quelque sorte) d'accord avec Scala? Je suis arrivé à la langue de C++ et avant de faire ma première copie les constructeurs voulaient voir si je manquais un point. Cela semble ... c'est bon (mes objets ont un état mutable). – akauppi