如果一個類包含一個對象作爲一個實例變量,而其中一個構造函數包含一個與參數類型相同的對象,最好的做法是將參數賦值給實例變量,或者從該變量創建一個新對象參數,並將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