首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Java.lang.Cloneable接口指南有关的问题

与Java.lang.Cloneable接口指南有关的问题
EN

Stack Overflow用户
提问于 2012-07-15 19:20:05
回答 3查看 330关注 0票数 0

根据java.lang.Cloneable接口:

文档 for Cloneable说-

请注意,此接口不包含克隆方法。因此,不可能仅仅依靠对象实现此接口这一事实来克隆对象。即使克隆方法被反思广益地调用,也不能保证它会成功。

但是下面的代码工作正常。当我调用ex1.clone时,它不会产生任何错误。

代码语言:javascript
复制
package com.sriPushpa.thread;

public class exceptionHandling implements Cloneable {
    int a = 10;

    public static void main(String args[]) {
        exceptionHandling ex1 = new exceptionHandling();
        exceptionHandling ex2 = null;
        try {
            ex2 = (exceptionHandling) ex1.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();
        }
        System.out.println("SUCCESS");
    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-15 19:28:55

clone()方法由java.lang.Object实现,作为一个受保护的方法。您的代码之所以工作,是因为您从与克隆类相同的类调用clone()方法。

如果您希望您的对象是可克隆的,则应该重写clone()方法并将其公开:

代码语言:javascript
复制
public Object clone() throws CloneNotSupportedException {
    return super.clone();
}

请注意,文档并没有说实现Cloneable接口总是会导致clone()失败。它说,实现它并不能保证clone()能够工作。这是非常不同的。

票数 1
EN

Stack Overflow用户

发布于 2012-07-15 19:24:55

在您的示例中,将调用Object方法,因为每个类都继承自java.lang.Object类。此clone()实现只执行逐字段复制。

Cloneable是一个标记接口。标记接口是一个接口,它既没有定义方法,也没有定义变量,而是用于在运行时提供有关对象的类型信息。

通过将这个标记接口添加到类定义中,可以保证不会通过调用类上的CloneNotSupportedException抛出任何clone

一般的建议是看看复制构造器与克隆 (乔希·布洛赫)是否真的想要使用clone

票数 4
EN

Stack Overflow用户

发布于 2012-07-15 19:23:19

根类java.lang.Object包含方法克隆()。默认情况下,如果具体类实现了Cloneable,则默认类实现将生成一个浅拷贝。

在方法文档中:

类对象的方法克隆执行特定的克隆操作。首先,如果该对象的类不实现接口Cloneable,则抛出一个CloneNotSupportedException。..。因此,该方法执行该对象的“浅拷贝”,而不是“深度复制”操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11494865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档