Я начинаю с Java и изучаю сеттеры, геттеры и инкапсуляцию. У меня очень простая программа, два класса:
Container
имеет частный массив целых чисел (numArray
) с его сеттером и геттером.Main
создает объектContainer
и использует его в методеtotalArray
.
public class Container {
private int numArray[]= {0,0,0};
public int[] getNumArray() {
return numArray;
}
public void setNumArray(int index, int value){
numArray[index] = value;
}
}
public class Main {
public static void main(String[] args) {
Container conte = new Container();
System.out.println(totalArray(conte.getNumArray()));
conte.getNumArray()[2]++;
System.out.println(totalArray(conte.getNumArray()));
}
private static int totalArray (int v[]){
int total=0;
for (int conta =0; conta<v.length;conta++){
total+=v[conta];
}
return total;
}
}
Проблема: я могу изменить закрытый массив int через геттер, я знаю, что это потому, что getNumArray
возвращает ссылку на numArray
, а не на сам массив. Если бы меня интересовал один элемент массива, я бы сделал геттер со значением индекса, но мне нужен весь массив для метода totalArray
.
Как я могу предотвратить изменение numArray
вне его класса?