gpt4 book ai didi

java - 如何按值而不是按引用复制对象

转载 作者:IT老高 更新时间:2023-10-28 21:01:09 24 4
gpt4 key购买 nike

我想制作一个对象的副本,然后经过一些逻辑,重新为原始对象分配副本的值。

示例:

User userCopy = //make a copy

foreach(...)
{
user.Age = 1;
user.ID = -1;

UserDao.Update(user)


user = userCopy;

}

我不想要按引用复制,它必须是按值复制。

以上只是一个示例,并不是我真正想使用的方式,但我需要学习如何按值复制。

最佳答案

以下是我听说过的几种技术:

  1. 如果类实现了Cloneable,则使用clone()。这个API在java中有点缺陷,我一直不太明白为什么clone不是在接口(interface)中定义的,而是在Object中定义的。不过,它可能会起作用。

  2. 手动创建一个克隆。如果有一个接受所有参数的构造函数,它可能很简单,例如 new User(user.ID, user.Age, ...)。你甚至可能想要一个接受用户的构造函数:new User( anotherUser ).

  3. 实现从/向用户复制的内容。除了使用构造函数,该类可能有一个方法copy(User)。然后,您可以先对对象 backupUser.copy(user) 进行快照,然后将其恢复 user.copy(backupUser)。您可能有一个带有名为 backup/restore/snapshot 的方法的变体。

  4. 使用 state pattern .

  5. 使用serialization .如果你的对象是一个图,序列化/反序列化它可能更容易获得一个克隆。

这一切都取决于用例。选择最简单的。

编辑

我还建议看看这些问题:

关于java - 如何按值而不是按引用复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2624165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com