如果一个类包含一个对象作为一个实例变量,而其中一个构造函数包含一个与参数类型相同的对象,最好的做法是将参数赋值给实例变量,或者从该变量创建一个新对象参数,并将THE NEW OBJECT赋值给实例变量。构造函数参数中的对象:创建新实例还是指定指针?
下面是一个锻炼我正在通过一个例子:
public class MyCircle {
private MyPoint center; //contains variables int x and int y
private int radius;
//Non-controversial Constructor:
public MyCircle(int x, int y, int radius) {
//creates new center using a valid MyPoint constructor
this.center = new MyPoint(x, y);
this.radius = radius;
}
//OPTION A
public MyCircle(MyPoint center, int radius) {
this.center = center;
this.radius = radius;
}
//OPTION B
public MyCircle(MyPoint center, int radius){
this.center = new MyPoint(center.getX(), center.getY());
this.radius = radius;
}
}
起初,我输入选项A,但我认为如果this.center
引用可能被间接地修改现有的对象,这可能创造的错误行为无意的。我猜想,另一种思考方式是创建一个创建共享中心的多个对象的途径,而移动一个中心将故意移动共享该中心的所有圈子。
这里没有真正的最佳实践,因为您可能希望调用代码能够修改中心。或者你没有。你也可以确保一个“MyPoint”是不可变的,所以“x”和“y”的值不能被改变,这也将消除复制“MyPoint”到构造函数。 – f1sh