Java 如何使用相同类型的对象创建对象

Java 如何使用相同类型的对象创建对象,java,Java,我想知道是否有可能获得一个对象的新实例,使用相同类型的其他对象 public class Vegetable{ private int ... //a lot of fields public Vegetable(Vegetable v) { //some magic here } } 我正在寻找一个选项,在这个选项中,我不会手动复制构造函数中的每个字段,而是使用类似于super(v)的东西。Java不提供默认的复制构造函数 但是,Java确实提

我想知道是否有可能获得一个对象的新实例,使用相同类型的其他对象

public class Vegetable{
    private int ...
    //a lot of fields
    public Vegetable(Vegetable v) {
        //some magic here
    }
}

我正在寻找一个选项,在这个选项中,我不会手动复制构造函数中的每个字段,而是使用类似于super(v)

的东西。Java不提供默认的复制构造函数

但是,Java确实提供了一个方法
Object.clone()
。您可以在实现Cloneable的类的实例上调用它。否则,它将抛出CloneNotSupportedException

默认实现创建一个浅拷贝。如果对象包含对其他对象的引用,则仅复制引用。这通常不是你想要的。要创建更深入、更独立的副本,可以扩展默认实现


您可以创建自己的复制构造函数,这有时很有用。但是,与
clone()
不同,复制构造函数不需要创建同一类的另一个实例。类T的复制构造函数总是会创建一个T,即使它传递了一个T子类的实例。

我认为这会导致无限递归……你的意思是你想克隆一个现有的对象吗?你能解释一下为什么要这样做吗?更高级别的目标是什么?@joaquin没有理由这么做。@SeanBright假设我有父类B和子类C。类B逻辑上指的是数据对象,而C指的是我想在GUI上处理的东西。在我的代码中有一个地方,我使用“公共类AbstractFoo Extendes Foo”。我希望能够将AbstractFoo与从A扩展的所有B-s和从B-s扩展的一些C-s一起使用。问题是B类有基于JSONObject或JsonString的构造函数。这就是为什么我想使用B类型的对象创建一个C实例。这将为我节省在B中创建每个字段构造函数的开销。