gpt4 book ai didi

java - 我们应该使用 clone 还是 BeanUtils.copyProperties 以及为什么

转载 作者:IT老高 更新时间:2023-10-28 13:47:34 28 4
gpt4 key购买 nike

从外观上看 - BeanUtils.copyProperties 似乎创建了一个对象的克隆。如果是这种情况,那么关于实现 Cloneable 接口(interface)的问题是什么(只有不可变对象(immutable对象)是新的,而可变对象复制了引用)这是最好的,为什么?

我昨天实现了可克隆,然后意识到我必须为非 String/Primative 元素提供自己的修改。然后我被告知我现在正在使用的 BeanUtils.copyProperties。两种实现似乎都提供了类似的功能。

谢谢

最佳答案

Josh Bloch 提供了一些相当不错的论据(包括您提供的论据)断言 Cloneable 存在根本缺陷,而是支持复制构造函数。见 here .

我还没有遇到过复制不可变对象(immutable对象)的实际用例。您出于特定原因复制对象,大概是为了将一组可变对象隔离到单个事务中进行处理,确保在该处理单元完成之前没有任何内容可以更改它们。如果它们已经是不可变的,那么引用就像副本一样好。

BeanUtils.copyProperties 通常是一种侵入性较小的复制方式,无需更改要支持的类,它在组合对象方面提供了一些独特的灵 active 。

也就是说,copyProperties 并不总是一刀切。您可能在某些时候需要支持包含具有专用构造函数但仍然是可变的类型的对象。您的对象可以支持内部方法或构造函数来解决这些异常,或者您可以将特定类型注册到某些外部工具中进行复制,但它无法到达甚至 clone() 可以到达的某些地方。这很好,但仍有限制。

关于java - 我们应该使用 clone 还是 BeanUtils.copyProperties 以及为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15542504/

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