克隆对象
假设在你的应用中使用一些对象,你如何拷贝你的对象呢?最明显的方法是讲一个对象简单的赋值给另一个,就像这样:
obj2 = obj1;
但是这个方法实际上没有拷贝对象而仅仅是拷贝了一个对象引用,换换言之,在你执行这个操作后仍然只有一个对象,但是多出了一个对该对象的引用。
如果这个看似明显的方法不能正常工作,那么如何实际的拷贝一个对象呢?为什么不试试Object.clone呢?这个方法对Object的所有子类都是可用的。例如:
-
- class A {
- private int x;
- public A(int i) {
- x = i;
- }
- }
-
- public class CloneDemo1 {
- public static void main(String args[])
- throws CloneNotSupportedException {
- A obj1 = new A(37);
- A obj2 = (A)obj1.clone();
- }
- }
-
这个代码引发一个编译错误,因为Object.clone是一个protected方法。那么再试一次,换一种方法:
-
- class A {
- private int x;
- public A(int i) {
- x = i;
- }
- public Object clone() {
- try {
- return super.clone();
- }
- catch (CloneNotSupportedException e) {
- throw new InternalError(e.toString());
- }
- }
- }
-
- public class CloneDemo2 {
- public static void main(String args[])
- throws CloneNotSupportedException {
- A obj1 = new A(37);
- A obj2 = (A)obj1.clone();
- }
- }
在这个方法中,呢定义自己的clone方法,它扩展Object.clone方法,CloneDemo2可以编译,但是当你运行它时会抛出一个CloneNotSupportedException异常。
这里仍然缺少一些东西,你必须让那些包含clone方法的类实现Cloneable接口,就像这样:
-
- class A implements Cloneable {
- private int x;
- public A(int i) {
- x = i;
- }
- public Object clone() {
- try {
- return super.clone();
- }
- catch (CloneNotSupportedException e) {
- throw new InternalError(e.toString());
- }
- }
- public<
补充:软件开发 , Java ,