Как я могу клонировать объект (глубокую копию) в Dart?

Есть ли способ, поддерживаемый языком, сделать полную (глубокую) копию объекта в Dart?

Только вторичный; есть ли несколько способов сделать это, и каковы различия?

Спасибо за разъяснение!

Ответ 1

Нет, насколько открытые проблемы, похоже, подсказывают:

http://code.google.com/p/dart/issues/detail?id=3367

И конкретно:

.. Objects have identity, and you can only pass around references to them. There is no implicit copying.

Ответ 3

Я думаю, что для не слишком сложных объектов вы можете использовать библиотеку convert:

import 'dart:convert';

а затем использовать функцию кодирования/декодирования JSON

Map clonedObject = JSON.decode(JSON.encode(object));

Если вы используете пользовательский класс как значение в клонированном объекте, классу либо нужно реализовать метод toJson(), либо вы должны предоставить функцию toEncodable для метода JSON.encode и метод reviver для вызов декодирования.

Ответ 4

Допустим, у вас есть класс

Class DailyInfo

  { 
     String xxx;
  }

Создайте новый клон объекта класса dailyInfo от

 DailyInfo newDailyInfo =  new DailyInfo.fromJson(dailyInfo.toJson());

Чтобы это работало, ваш класс должен быть реализован

 factory DailyInfo.fromJson(Map<String, dynamic> json) => _$DailyInfoFromJson(json);


Map<String, dynamic> toJson() => _$DailyInfoToJson(this);

что можно сделать, сделав класс сериализуемым, используя

@JsonSerializable(fieldRename: FieldRename.snake, includeIfNull: false)
Class DailyInfo{ 
 String xxx;
}

Ответ 5

Опоздал на вечеринку, но недавно я столкнулся с этой проблемой, и мне пришлось что-то делать: -

class RandomObject {

RandomObject(this.x, this.y);

RandomObject.clone(RandomObject randomObject): this(randomObject.x, randomObject.y);

int x;
int y;
}

Затем вы можете просто вызвать копию с оригиналом, например: -

final RandomObject original = RandomObject(1, 2);
final RandomObject copy = RandomObject.clone(original);