クラスにオブジェクトがインスタンス変数として含まれていて、コンストラクタの1つにパラメータと同じ型のオブジェクトが含まれている場合は、引数をインスタンス変数に代入するか、新しいOBJECTをインスタンス変数に割り当てます。私は、オプションA型指定されたが、私はthis.center
が、間接的に変更することができ、既存のオブジェクトを参照する場合、これはバグの振る舞いを作成することができると考え、当初はコンストラクタパラメータのオブジェクト:新しいインスタンスの作成、またはポインタの割り当て?
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;
}
}
:ここ
は、私が通じ働いている運動の例です無意識のうちに。別の考え方は、センターを共有する複数のオブジェクトを作成する手段を作り、そのセンターを共有するすべてのサークルを意図的に移動させるということです。 Javaはそのオプションが破棄されます(少なくともない開発者のための)何のポインタを持っていないと、この今進むべき道.. ではありませんので
ここでは、コーリングコードでセンターを変更できるようにするために、実際のベストプラクティスはありません。それともあなたはしません。また、 '' MyPoint''が '' x''と '' y''の値を変更できないように不変であることを確認すると、 '' MyPoint''をコピーする必要がなくなります。コンストラクタ。 – f1sh