看了这章,觉得这几句话重要:
一个专家级程序员,从来都不会去改写clone方法,也从来不去调用它,除非是为了低开销来拷贝一个数组。
一个为了继承而设计的类,如果未能实现一个行为良好的protected的clone方法,它的子类要实现cloneable接口是不可能的。
真的要做,如何实现改写clone方法呢?
所有实现了cloneable接口的类都应该用一个公有的方法改写clone,这个方法要首先调用super.clone,如果所有的类都实现这么做,那么最终就会回溯到object的clone方法,不会得到clone得到不对的对象的情况。调用super.clone之后,把所有复杂对象设成初始状态,原始类型数据可以直接复制。
通常情况下,此时还需要对内部的任何可变对象(比如堆栈,链表)进行深层结构的拷贝。不能简单的复制。
比如,a实例有一个堆栈stack,调用a的clone方法,如果仅仅是令b的stack=a的stack,那么修改a的stack同时会影响到b中stack的情况。所以,我们必须进行深层拷贝,防止这个问题。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器