Object.clone()方法的一些理解
date
Feb 28, 2020
slug
Object.clone()方法的一些理解
status
Published
tags
Java
summary
type
Post
为了加深对clone方法的了解重新复习一遍clone方法的使用。先看Object类的代码注释:
得知还有个Cloneable接口,然后再看Cloneable接口注释:
Object的clone方法是一个native方法,无法阅读它的源码。但通过阅读clone方法和Cloneable接口的注释得知:
- 没有实现Cloneable接口直接调用Object的clone方法会抛出CloneNotSupportException异常。
- clone方法是“浅拷贝”
- Cloneable接口内没有clone方法
clone方法的实现有点不按常规出牌。如果我们要通过clone方法拷贝一个对象,按照默认约定的规范步骤是:
- 实现Cloneable接口
- 重写clone方法为public
- 如对象内部变量均为基本数据类型或者不可变对象,则直接调用super.clone()后返回即可。
- 如果对象内部变量有属于可变对象或者内部变量有更复杂的数据结构组成,在重写方法体内调用super.clone()方法之后按需对域进行手动拷贝(深拷贝)。
参考:
Java核心技术卷 I ,第6章 接口与内部类,P224