当前位置: 首页 > 面试题库 >

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

白志勇
2023-03-14
问题内容

通过它的外观-
BeanUtils.copyProperties似乎创建了一个对象的克隆。如果是这样的话,那么与实现Cloneable接口有关的担忧(只有不可变对象才是新对象,因为可变对象复制了引用)是最好的,为什么?

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

谢谢


问题答案:

Josh
Bloch提供了一些相当不错的参数(包括您提供的参数),它们断言了Cloneable从根本上来说是有缺陷的,而偏向于使用复制构造函数。看这里。

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

BeanUtils.copyProperties 通常是一种不那么麻烦的复制方式,而无需更改要支持的类,并且它在组合对象方面提供了一些独特的灵活性。

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



 类似资料:
  • 从外观上看-似乎创建了一个对象的克隆。如果是这样,那么对于实现可克隆接口(只有不可变对象是新的,因为可变对象有引用复制)的关注,哪一个是最好的,为什么? 我昨天实现了克隆,然后意识到我必须为非字符串/首字母元素提供自己的修改。然后我被告知我现在正在使用的。这两个实现似乎都提供了类似的功能。 谢谢

  • 问题内容: 我正在一个将Angular和Underscore都作为依赖项的项目。 当我需要创建对象的副本时,根据当时的心情,我可以使用或 在我看来,这些方法中的一种可能比另一种更快速/可靠/健壮。 假设已经包含两个库,那么这两个函数中的任何一个是否存在使另一个函数更好或更坏使用的已知问题? 问题答案: 关于您的问题: angular.copy和_.clone是不同的。这不是哪个更好的问题,而是关于

  • 问题内容: 为什么以及何时应该在php中使用该函数?使用后是否应该始终使用它?我读到我必须使用它来防止会话固定,这是唯一原因吗? 问题答案: 什么啊 就像函数名称所说的那样,它是一个函数,它将用新的ID替换当前的会话ID,并保留当前的会话信息。 它有什么作用? 它主要有助于防止会话固定攻击。会话固定攻击是恶意用户试图利用系统中的漏洞固定(设置)另一个用户的会话ID(SID)的地方。这样,他们将拥有

  • 关于这一点的文献不多。我想知道,我们应该先打电话吗 或 在https://developers.google.com/admob/android/quick-start 尽管谷歌建议致电<code>MobileAds。尽早初始化 在加载广告之前,让您的应用通过调用MobileAds.initialize()初始化Mobile Ads SDK,MobileAds.initialize初始化SDK,并

  • 问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果

  • 问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前