java - 如何从旧实例创建新实例?

标签 java c++ duplicates createinstance

我有一种情况需要从该类的另一个实例创建一个类的新实例。它必须是一个新实例,而不是对旧实例的引用,因为需要在不影响旧实例的情况下操作新实例。

我得出的结论是,我的类中必须有一个构造函数,并且在该类中使用的每个类型的每个类中都必须有一个构造函数,它将自己的类型作为参数,并从该参数创建新类型:

public class MainClass {
    public Type0 type0;
    public Type1 type1;
    public Type2 type2;


    MainClass(MainClass mc) {
        type0 = new Type0(mc.type0);
        type1 = new Type1(mc.type1);
        type2 = new Type2(mc.type2);
    }
}



public class Type0() {
    public int i;
    public SomeOtherType t;

    Type0(Type0 t0) {
        i = t0.i;
        t = new SomeOtherType(t0.t);
    }
}

 . . . 

这在 C++ 中会简单得多,我可以简单地说 newInstance = oldInstance。但是在 Java 中,从旧实例创建新实例的最佳实践是什么?这是我必须要做的吗?在 Java 中,在每个类中都有这些类型的构造函数是最佳实践吗?还是有更好的方法来解决这个问题?

最佳答案

不是not advisable使用克隆方法(以防有人建议)。

你是对的,一个好的方法是提供一个复制构造函数,它接收一个要复制的实例。这是 Joshua Bloch 在他的畅销书 Effective Java 中推荐的。

关于java - 如何从旧实例创建新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26854186/

相关文章:

java - 创建一个方法来检查排序算法是否稳定

java - 在android开发中使用命令行安装ffmpeg库

java - 如何使用java使用上述单元格的值填充所有空单元格

python - 根据元组中的索引删除重复的元组值

python - 通过过滤生成不同(距离远,按编辑距离)单词的列表

java - 如何将 Android 相机输出作为 Java short(不是字节)?

c++ - MinGW,链接到 Windows 上的 dll

c++ - 使用 SFML 的 C++ 中缺少声明的错误

c++ - STL 容器元素是否明确要求 (noexcept) 可破坏?

c# - 使用重复处理 C# 中的列表联合