java - 为什么一个对象不能被克隆?

标签 java interface clone cloneable

<分区>

我阅读了很多关于 Object 的 clone() 方法和 Cloneable 接口(interface)的线程,但我找不到对我的问题的合理答案。 长话短说:

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

最佳答案

Cloneable 对某些可变数据有意义。

没有意义

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

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

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

关于java - 为什么一个对象不能被克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16315628/

相关文章:

java - ImageView不显示图像

java - 增强现实测量技术/方法

inheritance - 是否可以向 Kotlin 中的现有类添加接口(interface)?

c++ - 将 boost::function 克隆到一个指针中并使用该指针调用包装函数

c++ - Qt c++ - 克隆一个对象

java - 调试直到变量达到某个值

java - 如何通过多级继承调用错误的override方法?

java - 实例化接口(interface)后无需编写任何代码即可使用接口(interface)的方法

java - 为什么 IntelliJ 说尽管编译了类构造函数还是不正确?

java - 重写clone()方法时,为什么需要将其声明为public?