【问题标题】:How does implementing Cloneable interface allows cloning of objects, as it is a Marker Interface and doesn't have any methods? [duplicate]实现 Cloneable 接口如何允许克隆对象,因为它是一个标记接口并且没有任何方法? [复制]
【发布时间】:2019-03-20 20:45:53
【问题描述】:

我有一个要克隆其对象的类。我通过实现 Cloneable 接口并覆盖 clone 方法来做到这一点。但是,如果我正在创建一个克隆方法,而没有实现 Cloneable 接口,则会引发异常。 这个标记接口(可克隆)为我的班级提供了什么超能力?

【问题讨论】:

  • Serializable 将对象写入磁盘的方式相同,尽管它是一个标记接口。
  • This answer to the duplicate 解释了实现Cloneable 的工作原理。界面只是简单地告诉 native Object.clone 方法,“嘿,你可以克隆我”。如果没有接口,该方法将拒绝克隆对象(通过抛出异常)。正如 Elliot 所说,这类似于 Serializable 的使用方式。

标签: java clone cloneable marker-interfaces


【解决方案1】:

在java中克隆对象:

Cloneable 接口。您可能希望该接口有一个 clone() 方法,该方法将返回对象的副本。但是,事实并非如此。 Cloneable 只是一个标记界面。这意味着,它没有任何方法,它只是将类标记为适合克隆。 clone 方法存在于 Object 类中。

【讨论】:

    【解决方案2】:

    允许根据Object.cloneJavaDoc进行克隆:

    首先,如果这个对象的类没有实现接口 Cloneable,然后抛出 CloneNotSupportedException

    每次您致电Object.clone() 时,都会验证此要求。

    CloneableJavaDoc 本身说:

    一个类实现了Cloneable 接口来指示 Object.clone() 方法,该方法创建一个 该类实例的逐场副本。调用对象 未实现 Cloneable 的实例上的 clone 方法 接口导致异常CloneNotSupportedException被 扔了。

    总结一下:
    这是指定行为的一部分。在运行时不遵守此要求将是显而易见的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2023-03-15
      • 1970-01-01
      • 2011-08-25
      • 2012-01-28
      相关资源
      最近更新 更多