class Player
{
private Location location;
public Location getLocation()
{
return location;
}
public void setLocation(Location location)
{
this.location = location;
}
}
...
class Location
{
int x,y,z;
public Location(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
public Location(Location location)
{
this.x = location.x;
this.y = location.y;
this.z = location.z;
}
public void updateLocation(Location location) //the fix..
{
this.x = location.x;
this.y = location.y;
this.z = location.z;
}
}
言う..あなたがする
Player p1 = new Player();
Player p2 = new Player();
p1.setLocation(p2.getLocation());
他の人の場所を変更しようとすると、バグ/問題が発生します。両方のプレイヤーが同じ場所を共有するようになったため、両方のプレイヤーの場所がまったく同じように変更されます。
したがって、もちろん、以下は問題なく機能します。
p1.setLocation(new Location(p2.getLocation()));
しかし問題は、常に新しいオブジェクトを作成することです..既存のインスタンスを更新するだけでよいのに..? これを修正するために以下で行ったように、独自のメソッドを作成せずに、デフォルトで既存のインスタンスを更新するにはどうすればよいですか。
以下の方法を使用してこれを修正する必要がありました(以下のようにせずにデフォルトでこれを行う方法)
public void setLocation(Location location)
{
if (this.location == null)
this.location= new Location(location);
else
this.location.updateLocation(location);
}
私が知らないかもしれないトリックを知っている人はいますか?ありがとう。