Java中如何使用super.clone()确保深拷贝实现遵循正确的克隆链?

2026-04-29 09:142阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1170个文字,预计阅读时间需要5分钟。

Java中如何使用super.clone()确保深拷贝实现遵循正确的克隆链?

java默认的clone()方法仅做浅拷贝:

常见错误现象:CloneNotSupportedException 没抛出,程序也不报错,但业务逻辑出 bug —— 比如两个“独立”的配置实例共享同一个 Map,改一个,另一个也变了。

  • 必须确保当前类实现 Cloneable 接口(否则 super.clone()CloneNotSupportedException
  • clone() 方法必须声明为 public,因为 Object.clone()protected
  • 不能依赖 super.clone() 自动处理嵌套对象,那是你自己的责任

如何在 clone() 中安全调用 super.clone() 并补全深拷贝

正确做法是:先调用 super.clone() 得到浅拷贝实例,再对每个可变引用字段手动克隆或重建。关键在于“谁负责克隆谁”——只有你自己最清楚哪些字段需要深拷,哪些可以共享(比如 String 是不可变的,无需克隆)。

阅读全文
标签:Java

本文共计1170个文字,预计阅读时间需要5分钟。

Java中如何使用super.clone()确保深拷贝实现遵循正确的克隆链?

java默认的clone()方法仅做浅拷贝:

常见错误现象:CloneNotSupportedException 没抛出,程序也不报错,但业务逻辑出 bug —— 比如两个“独立”的配置实例共享同一个 Map,改一个,另一个也变了。

  • 必须确保当前类实现 Cloneable 接口(否则 super.clone()CloneNotSupportedException
  • clone() 方法必须声明为 public,因为 Object.clone()protected
  • 不能依赖 super.clone() 自动处理嵌套对象,那是你自己的责任

如何在 clone() 中安全调用 super.clone() 并补全深拷贝

正确做法是:先调用 super.clone() 得到浅拷贝实例,再对每个可变引用字段手动克隆或重建。关键在于“谁负责克隆谁”——只有你自己最清楚哪些字段需要深拷,哪些可以共享(比如 String 是不可变的,无需克隆)。

阅读全文
标签:Java