問題是我無法修改我從內部寫入的對象,從而創建了一個我修改並返回的克隆。但是,在其他函數中,我直接修改調用該方法的對象。我希望和人們建議,保持事物的一致性,因此用戶可以對返回的克隆執行任何他們喜歡的操作,而無需修改實際的對象。直接修改對象或返回對象的修改後的克隆會更好嗎?
我必須在某些函數中返回對象的修改後的克隆,因爲沒有辦法繞過它(我意識到)。除了標題中的問題,最好還是採取一致的做事方式(讓我爲即使是最輕微的變化返回克隆),還是可以,如果我有不同的方式來回復同一班級的用戶?
[編輯]它是更好地做到這一點:
public Image fillWithColor(Color fillColor) {
Image newImage = new Image(this.getWidth(), this.getHeight(), this.getType());
for (int x = 0; x < this.getWidth(); x++) {
for (int y = 0; y < this.getHeight(); y++) {
newImage.setPixel(x, y, fillColor.getRGB());
}
}
return newImage;
}
或本:
public void fillWithColor(Color fillColor) {
for (int x = 0; x < this.getWidth(); x++) {
for (int y = 0; y < this.getHeight(); y++) {
this.setPixel(x, y, fillColor.getRGB());
}
}
}
這實際上是一個重要的問題!不要投票結束。這基本上是對象是否應該是可變的問題。 – Ingo 2014-12-06 19:53:38
這完全取決於你將如何處理下游對象,以及你採用什麼約定來使用這些對象。對於某些程序來說,答案可能更有效率,對其他程序來說則可能不對 – keshlam 2014-12-06 20:06:02
我認爲返回一個「newImage」並仍然操作源代碼會很奇怪。我也認爲假設調用一個像「fillWithColor」這樣的對象不會返回任何內容的方法不會修改對象是非常糟糕的。 – nPn 2014-12-06 20:26:08