作者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)
1F:推 asilzheng:因为你回传的是整个 Array,考虑使用getXXX(i, j)的方式 07/12 23:42
2F:→ asilzheng:对不起,上面我弄错意思了 07/12 23:43
3F:→ coolcomm:getArray本来就不是好写法 它暴露了实作的内容 07/13 01:09
4F:→ jtorngl:唯读就不要提供setter罗 07/13 13:23
5F:→ jtorngl:再说getter、setter里面可以有「封装」而需的逻辑 07/13 13:25
6F:→ jtorngl:比如存提款不得小於0,那可能就会判断抛出Exception 07/13 13:28
7F:→ realmeat:XD 不是都是100吗? 有很奇怪吗? 07/13 13:58