我是新來的Java,我想知道爲什麼可以通過這種方式設置私有屬性的值,而不使用setter? :爲什麼我可以用Java中的getter設置私有類屬性的值?
class Example {
private int[] thing;
public void initialize() {
thing = new int[10];
}
public int[] getThing() {
return thing;
}
}
class myclass {
public static void main(String args[]) {
Example e = new Example();
e.initialize();
e.getThing()[0] = 1;
System.out.println(e.getThing()[0]) // value is still 1...
}
我真的不明白爲什麼這是合法的......
編輯:我預計e.getThing()返回的東西價值不哪怕是給一點參考,案件,因爲「事物」是私人的,我認爲我不能直接修改它。
你確定你將值設置爲**其他類的**私有成員嗎? –
你期待什麼? – AxelH
如果你想讓事情只讀,我會以兩種方式之一來做到這一點。 1)製作一個數組的防禦副本,其中我用'new'創建另一個數組並返回這個數組。 2)使用列表(例如,ArrayList),並返回一個'Iterable'(這是一個由所有列表實現的接口)。唯一可以用'Iterable'完成的事情或多或少迭代(儘管如果它們是聚合,可以修改迭代中的對象)。 –
patrik