Comment cloner un objet dans Kotlin?
La question est aussi simple que cela.
Kotlin documentation décrit le clonage seulement dans l'accès à Java et dans la classe enum. Dans ce dernier cas, le clone est juste de lancer une exception.
Alors, comment pourrais-je /dois-je clone arbitraire Kotlin objet?
Devrais-je utiliser clone()
comme en Java?
Vous devez vous connecter pour publier un commentaire.
Pour un
data class
, vous pouvez utiliser le compilateur a générécopier()
méthode. Notez qu'il effectuera une copie superficielle.Pour créer une copie d'une collection, utilisez la
toList()
outoSet()
méthodes, selon le type de collection dont vous avez besoin. Ces méthodes de toujours créer une nouvelle copie de collection; ils effectuent également une copie superficielle.Pour les autres classes, il n'y a pas de Kotlin-spécifique du clonage solution. Vous pouvez utiliser
.clone()
si cela convient à vos besoins, ou de construire une autre solution si il ne le fait pas.List<String>
Vous pouvez utiliser Gson pour convertir l'objet d'origine à une Chaîne, puis de les convertir en arrière de cette Chaîne à un type d'Objet, et vous aurez un clone. Voir mon exemple. Mettre cette fonction dans la classe/le modèle de laquelle vous souhaitez créer un clone. Dans mon exemple, je suis le clonage d'une Projet type d'objet donc je vais le mettre dans le Projet classe
Puis l'utiliser comme ceci:
Elle nécessite de mettre en œuvre Clonable, pour votre classe, puis remplacer clone() en tant que public comme:
https://discuss.kotlinlang.org/t/how-to-use-cloneable/2364/3
J'ai voté pour @yole pour belle réponse, mais d'autres moyens si vous n'avez pas (ou ne pouvez pas) utiliser les données de la classe. Vous pouvez écrire de la méthode d'assistance comme ceci:
De sorte que vous pouvez "copier" de l'instance de A dans B par:
Parfois, j'utilise ce moyen de fusionner les données de plusieurs instances dans un objet dont la valeur disponible (non null).
data class
es, si faireabstract
ouopen
. Comment pensez-vous, ce code compile en Androidrelease
construire (il n'aime pas la réflexion).