为什么对象不应该是可克隆的?

use*_*815 5 java clone interface cloneable

我阅读了很多有关对象的clone()方法和可克隆接口的线程,但我找不到我的问题的合法答案。长话短说:

我发现 Object 有一个方法 clone() ,它可以“神奇地”克隆你的对象。但是,如果不实现 Cloneable 接口,则无法使用该方法,因为该接口允许 Object 使用clone() 方法。那么他们为什么要这么做呢?为什么每个对象不应该从一开始就可以克隆?

Pet*_*rey 4

对于一些可变数据来说,Cloneable 是有意义的。

这没有意义

  • 不可变数据
  • 您可能需要浅拷贝或深拷贝的地方。
  • 代表资源的对象,例如线程、套接字、GUI 组件
  • 单例和枚举类型
  • 可变状态,仅应复制数据以避免创建新对象。

一些编码风格建议将新的可变数据对象保持在最低限度。可克隆并不适合所有情况,如果您将所有对象设置为可克隆,您将无法彻底关闭它。

注意:有许多项目避免在任何地方使用 Cloneable。