Клонировать объект Android с помощью сериализации - PullRequest
1 голос
/ 27 апреля 2011

Мне нужно клонировать объект, который я создал (пользовательский класс). Клонировать его с помощью стандартного object.clone было бы грязно, поскольку он включает ссылки на другие объекты, и мне бы тоже пришлось их клонировать.

Я прочитал, что одним из способов клонирования было бы сериализовать объект, а затем десериализовать его.

Это хорошая идея?

Ответы [ 3 ]

1 голос
/ 27 апреля 2011

Вы пишете:

Клонирование его с использованием стандартного object.clone было бы грязным, так как оно включает ссылки на другие объекты, и это потребовало бы от меня и их клонирования.

Когда вы выполняете клонирование через сериализацию, вам либо

  • необходимо также сериализовать эти другие объекты (в противном случае результирующий объект не является реальным клоном)
  • принять, что клон будет частичным(без ссылочных объектов).

В последующем случае вы можете просто реализовать метод clone(), который исключает другие объекты.

За исключением стоимости сериализации, TANSTAAFL

1 голос
/ 27 апреля 2011

Вы должны знать, что сериализация добавляет издержки, огромные накладные расходы по сравнению с прямым клонированием. Вы также должны убедиться, что каждый член вашего класса (и, в свою очередь, каждый член каждого поля, ...) должен быть сериализуемым. Я бы предпочел добавить правильную реализацию clone ().

0 голосов
/ 27 апреля 2011

Обычно сериализация используется для отправки объектов куда-либо (в файл или по сети), чтобы кто-то еще мог восстановить их позже.Но вы можете злоупотребить им, чтобы немедленно восстановить объект самостоятельно.Если объект вообще сериализуем, реконструкция должна быть точной копией.

Но этот метод не следует использовать легкомысленно.Во-первых, сериализация очень дорогая.Он может быть в сто раз дороже, чем метод clone ().Во-вторых, не все объекты являются сериализуемыми.В-третьих, сделать сериализуемый класс сложно, и не все классы могут быть использованы для правильного определения.(Вы можете предположить, что системные классы верны.) Поэтому я считаю, что это не очень хорошая идея.

...