似乎有一个共识,即 Java 的克隆已经被破坏到了如果可能的话永远不应该使用的程度。
我遇到的情况是克隆似乎是正确的工具,但我想知道是否还有其他方法:
我在 mongo 数据库中存储了各种对象。它们使用 Morphia 保存和加载,它会自动返回具有正确类和属性的对象。
在某些情况下,数据库中存储的内容是我想要为其创建副本的对象的“原型(prototype)”。它来自吗啡,具有正确的类和默认值,我希望能够制作一个保留类和默认值的副本。例如:
achievementPrototype = morphia.get(id);
playerAchievements.add(achievementPrototype.clone());
其中 AchievementPrototype 属于 AbstractAchievement 的具体实现类。看来克隆做了我想要的事情。我知道如果成就有对象作为属性,我就必须实现它们的克隆,但我对此表示同意。
我应该使用clone()吗?如果没有,我应该使用什么?
最佳答案
并不是说它坏了,而是在不修改它的情况下它无法按照大多数人想要的方式工作。您的对象必须实现 Cloneable 并重写 clone() 方法才能将其公开。有一些我个人更喜欢的替代方案。
BeanUtils:
BeanUtils.cloneBean(objectToClone) 将创建一个浅克隆,类似于使用 Object.clone() 创建的内容。
序列化实用程序:
SerializationUtils.clone(objectToClone)将创建一个深度克隆,您可能正在寻找它,但所有对象都必须实现可序列化。
关于java - 创建原型(prototype)的副本,我应该使用克隆吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19523593/