复制复制其他对象值的构造函数

时间:2013-11-13 10:03:16

标签: java

这是我的班级:

public class City
{
    private String _cityName;
    private Point _cityCenter;
    private Point _centralStation;
    private long _numOfResidents;
    private int _noOfNeighborhoods;
    private final long RESIDENTS_CONST_VALUE = 0;
    private final int NEIGHBORHOODS_CONST_VALUE = 1;
}

我的一个构造函数是从其他对象复制(同一个对象):

public City(City other)
{
    _cityName = other._cityName;
    _cityCenter = other._cityCenter;
    _centralStation = other._centralStation;
    _numOfResidents = other._numOfResidents;
    _noOfNeighborhoods = other._noOfNeighborhoods;      
}

public Point(Point point)
{
    _x = point._x;
    _y = point._y;
}

此构造函数获取另一个City对象并复制它的值。 我的问题是,如果我做了它可以避免混淆或我需要做其他事情

3 个答案:

答案 0 :(得分:3)

问题是您正在将引用从旧对象复制到new。在复制可变字段时会产生问题。如果两个对象共享对字段的公共引用,则更改一个对象中的值将影响复制对象好。

答案 1 :(得分:2)

我看到的唯一问题是对Point类的引用(我假设我们正在考虑java.awt.Point)。此类是可变的,因此您复制的City类可以更改它,并且更改也将反映在您的副本中。使用以下代码复制Point对象:

_cityCenter = new Point(other._cityCenter);
_centralStation= new Point(other._centralStation);

其余字段是基元或不可变的,所以没关系

答案 2 :(得分:0)

你所做的事情看起来很清醒,至少因为你没有复制Point个对象,那些很可能是可变的,即如果你通过简单的任务复制它们,你只会复制引用并更改为一个对象将反映在'副本' - >浅拷贝。如果你需要复制它们,那么你也必须为它们实现一个“复制构造函数”。

然而,在java中执行此操作的标准方法是实现Colneable接口并覆盖clone方法。