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

Java 复制复制其他对象值的构造函数,java,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; pr

这是我的班级:

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;
}
我的一个构造函数是从其他对象(同一对象)复制的:

此构造函数获取另一个
City
对象并复制其值。
我的问题是,我所做的是否可以避免别名,或者我需要做其他事情

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

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

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

其余字段要么是原语,要么是不可变的,因此您所做的看起来很正常,至少因为您没有复制
对象,这些对象很可能是可变的,也就是说,如果您通过简单赋值复制它们,您将只复制引用,对一个对象的更改将反映在“复制”->浅复制中。如果您也需要复制它们,那么您也必须为它们实现“复制构造函数”


但是,在java中执行此操作的标准方法是实现接口并重写该方法。

如果我的点复制方法与我的示例中的方法类似(请参见我的更新),那么它就可以了?啊,因此它是一个自定义类。我建议使这个类不可变。如果不能,那么是的,您的实现是正常的(x any y是基本体,对吗?)x和y是int类型,在这种情况下这是正常的?是的,int是基本体
_cityCenter = new Point(other._cityCenter);
_centralStation= new Point(other._centralStation);