新手Java问题.说我有:
public class Car{ ... } public class Truck extends Car{ ... }
假设我已经有了一个Car对象,如何从这个Car对象创建一个新的Truck对象,以便将Car对象的所有值复制到我的新Truck对象中?理想情况下,我可以这样做:
Car c = new Car(); /* ... c gets populated */ Truck t = new Truck(c); /* would like t to have all of c's values */
我是否必须编写自己的复制构造函数?每次Car获得一个新领域时都必须更新...
是的,只需将构造函数添加到Truck.您可能还想为Car添加构造函数,但不一定是公开的:
public class Car { protected Car(Car orig) { ... } public class Truck extends Car { public Truck(Car orig) { super(orig); } ... }
作为一项规则,通常最好将类(或者您可能想要标记那些最终的)或抽象化.
它看起来好像你想要一个Car
对象,然后让相同的实例变成一个Truck
.更好的方法是将行为委托给Car
(Vehicle
)中的另一个对象.所以:
public final class Vehicle { private VehicleBehaviour behaviour = VehicleBehaviour.CAR; public void becomeTruck() { this.behaviour = VehicleBehaviour.TRUCK; } ... }
如果您实现,Cloneable
那么您可以"自动"将对象复制到同一个类的实例.然而,存在许多问题,包括必须复制易于出错的可变对象的每个字段并且禁止使用final.
如果您在项目中使用Spring,则可以使用ReflectionUtils.