Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Cloneable或copy构造函数,我为什么要使用它们中的任何一个?这两种策略实际上都有什么作用?_Java_Spring_Jakarta Ee_Copy Constructor_Cloneable - Fatal编程技术网

Java Cloneable或copy构造函数,我为什么要使用它们中的任何一个?这两种策略实际上都有什么作用?

Java Cloneable或copy构造函数,我为什么要使用它们中的任何一个?这两种策略实际上都有什么作用?,java,spring,jakarta-ee,copy-constructor,cloneable,Java,Spring,Jakarta Ee,Copy Constructor,Cloneable,我的问题很像noob,所以请原谅我的无知,因为我是noob 我在我工作的公司遇到一些顾问编写的代码。当我尝试深入研究代码时,我不知道为什么一个类要实现一个名为clonable的接口。所以我试着在谷歌上搜索这个混乱的地方,我看到的只是“不要使用它”或者“使用复制构造函数”。我不知道这两样东西是什么。有人能详细说明何时需要这种克隆的原因吗?为什么我要克隆一个对象 我和前顾问谈过,他提到这将使我们能够链接方法。比如questionSet.dosomething().donotherthing().do

我的问题很像noob,所以请原谅我的无知,因为我是noob

我在我工作的公司遇到一些顾问编写的代码。当我尝试深入研究代码时,我不知道为什么一个类要实现一个名为clonable的接口。所以我试着在谷歌上搜索这个混乱的地方,我看到的只是“不要使用它”或者“使用复制构造函数”。我不知道这两样东西是什么。有人能详细说明何时需要这种克隆的原因吗?为什么我要克隆一个对象

我和前顾问谈过,他提到这将使我们能够链接方法。比如
questionSet.dosomething().donotherthing().dowth()


它用于将对象传递给其他方的情况。如果对象是可变的,并且您不想冒险让另一方更改您的对象,您可以只给它一个对象的克隆或副本,而不是原始对象。

我认为您误解了前顾问所说的话,或者这就是他是前顾问的原因。我从未使用过这两种方法(实验时除外),在Java的17年中,
clone()
之所以存在于
Object
上,关键原因在于数组:你可以克隆一个数组来制作一个浅拷贝。(数组和普通类层次结构之间的精确关系不是Java中应有的平滑关系之一…)这不是一个重复的问题。我在问为什么需要克隆一个对象。在什么情况下克隆对象有用。我还没有得到答复。有人告诉我,它允许将方法链接在一起。但我不知道那是什么意思。注意:强调单词NOOB..@DonalFellows:如果基类型
CloneableObject
有一个受保护的成员
memberwiseClone
,该成员使用内部魔法从旧对象按位复制新对象,我看不出数组会带来什么问题,还有一个
Cloneable
接口,其中包括一个成员
Clone
,哪些阵列可以实现?正确克隆未密封类型的唯一正确方法是让每个祖先类型都支持克隆,但并非所有支持在派生类型中克隆的类型都希望发布该事实并将派生类型提交给支持它的人。这似乎与我的想法一致。你能再详细一点吗?
public class QuestionSet implements Cloneable {
     ...

    /* (non-Javadoc)
     * @see java.lang.Object#clone()
     */
    @Override
    public QuestionSet clone() {
        return new QuestionSet(this);
    }

    ...
}