我想知道是否有可能使用相同类型的其他对象来获取对象的新实例。
public class Vegetable{
private int ...
//a lot of fields
public Vegetable(Vegetable v) {
//some magic here
}
}
我正在寻找一个选项,我不会在构造函数中手动复制每个单独的字段,而是使用 super(v)之类的东西。
答案 0 :(得分:3)
Java不提供默认的复制构造函数。
但是,Java确实提供了方法Object.clone()
。您可以在实现Cloneable的类的实例上调用它。否则,它将抛出CloneNotSupportedException。
默认实现会创建浅层副本。如果对象包含对其他对象的引用,则仅复制引用。这通常不是你想要的。要创建更深入,更独立的副本,可以扩展默认实现。
您可以创建自己的复制构造函数,这有时很有用。但是,与clone()
不同,复制构造函数不需要创建同一个类的另一个实例。类T的复制构造函数将始终创建一个T,即使它传递了T的子类的实例。