java克隆的控制 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-26
用这个方法,而不是调用super.clone()。违例永远不会产生,而且新类是可以克隆的。因此,我们不能依赖“掷”出一个违例的方法来防止产生一个可克隆的类。唯一安全的方法在ReallyNoMore中得到了演示,它设为final,所以不可继承。这意味着假如clone()在final类中掷出了一个违例,便不能通过继承来进行修改,并可有效地禁止克隆(不能从一个拥有任意继承级数的类中明确调用Object.clone();只能调用super.clone(),它只可访问直接基础类)。因此,只要制作一些涉及安全问题的对象,就最好把那些类设为final。在类CheckCloneable中,我们看到的第一个类是tryToClone(),它能接纳任何Ordinary对象,并用instanceof检查它是否能够克隆。若答案是肯定的,就将对象造型成为一个IsCloneable,调用clone(),并将结果造型回Ordinary,最后捕获有可能产生的任何违例。请注意用运行期类型鉴定(见第11章)打印出类名,使自己看到发生的一切情况。在main()中,我们创建了不同类型的Ordinary对象,并在数组定义中上溯造型成为Ordinary。在这之后的头两行代码创建了一个纯粹的Ordinary对象,并试图对其克隆。然而,这些代码不会得到编译,因为clone()是Object中的一个protected(受到保护的)方法。代码剩余的部分将遍历数组,并试着克隆每个对象,分别报告它们的成功或失败。输出如下:总之,如果希望一个类能够克隆,那么:(1) 实现Cloneable接口(2) 覆盖clone()(3) 在自己的clone()中调用super.clone()(4) 在自己的clone()中捕获违例这一系列步骤能达到最理想的效果。Attempting IsCloneable Cloned IsCloneable Attempting NoMore Could not clone NoMore Attempting TryMore Could not clone TryMore Attempting BackOn Cloned BackOn Attempting ReallyNoMore Could not clone ReallyNoMore |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 使克隆具有更大的深度 - 编程入门网下一篇: 为什么有这个奇怪的设计 - 编程入门网
关于java克隆的控制 - 编程入门网的所有评论