[問題] Getter and Setter

看板java作者 (西門貓)時間11年前 (2013/07/12 23:13), 編輯推噓1(106)
留言7則, 4人參與, 最新討論串1/5 (看更多)
因為封裝的關係, 所以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)

07/12 23:42, , 1F
因為你回傳的是整個 Array,考慮使用getXXX(i, j)的方式
07/12 23:42, 1F

07/12 23:43, , 2F
對不起,上面我弄錯意思了
07/12 23:43, 2F

07/13 01:09, , 3F
getArray本來就不是好寫法 它暴露了實作的內容
07/13 01:09, 3F

07/13 13:23, , 4F
唯讀就不要提供setter囉
07/13 13:23, 4F

07/13 13:25, , 5F
再說getter、setter裡面可以有「封裝」而需的邏輯
07/13 13:25, 5F

07/13 13:28, , 6F
比如存提款不得小於0,那可能就會判斷拋出Exception
07/13 13:28, 6F

07/13 13:58, , 7F
XD 不是都是100嗎? 有很奇怪嗎?
07/13 13:58, 7F
文章代碼(AID): #1Hu1qXO8 (java)
文章代碼(AID): #1Hu1qXO8 (java)