作者gn00742754 (西門貓)
看板java
標題[問題] Getter and Setter
時間Fri Jul 12 23:13:34 2013
因為封裝的關係,
所以Java應該要將欄位設為private,
使用Getter and Setter供外部存取,
可是我看Java的String、Array、Object都是參照型別,
那這樣用Getter取得的變數,
不就也可以直接影響被封裝的Class?
那我如果想使這些欄位唯讀,
該怎麼做會比較好?
還是我對Java的理解有錯誤?
---------------------------------------------------
對於以上疑惑,我寫了一個測試的程式,卻更讓我疑惑了,
如果程式有寫錯,還請指教。
public static void main(String[] args) {
Foo mFoo = new Foo();
int[][] arrayA = new int[10][10];
arrayA = mFoo.getFooArray();
arrayA[0][0] = 100;
System.out.println(arrayA[0][0]);
mFoo.printFooArray();
}
public class Foo {
private int[][] fooArray;
public Foo() {
super();
fooArray = new int[10][10];
}
public int[][] getFooArray(){
return fooArray;
}
public printFooArray(){
System.out.println(fooArray[0][0]);
}
}
以上印出來卻都是100....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.35.107.99
※ 編輯: gn00742754 來自: 114.35.107.99 (07/12 23:25)
※ 編輯: gn00742754 來自: 114.35.107.99 (07/12 23:26)
推 asilzheng:因為你回傳的是整個 Array,考慮使用getXXX(i, j)的方式 07/12 23:42
→ asilzheng:對不起,上面我弄錯意思了 07/12 23:43
→ coolcomm:getArray本來就不是好寫法 它暴露了實作的內容 07/13 01:09
→ jtorngl:唯讀就不要提供setter囉 07/13 13:23
→ jtorngl:再說getter、setter裡面可以有「封裝」而需的邏輯 07/13 13:25
→ jtorngl:比如存提款不得小於0,那可能就會判斷拋出Exception 07/13 13:28
→ realmeat:XD 不是都是100嗎? 有很奇怪嗎? 07/13 13:58