Как уже говорили другие, вы можете вернуть копию массива:
public int[]getMyArray(){
return myPrivateArray.clone();
}
В качестве альтернативы, вы можете предоставить поглотитель для доступа к отдельным элементам массива:
public int getMyArray(int index){
return myPrivateArray.get(index);
}
Наконец, если вы бы хотели избежать копирования, но настаиваете на возврате всех элементов сразу, вы можете вернуть немодифицируемое представление списка вашего массива:
public class MyClass{
private Object[]myPrivateArray;
private List<Object>myArrayView=Collections.unmodifiableList(Arrays.asList(myPrivateArray));
public List<Object>getMyArrayView(){
return myArrayView;
}
}
Хотя это немного более сложным с массивом примитивов:
public class MyClass{
private int[]myPrivateArray;
private List<Integer>myArrayView=new AbstractList<Integer>(){
@Override public int size(){
return myPrivateArray.length;
}
@Override public Integer get(int index){
return myPrivateArray[index]
}
}
public List<Integer>getMyArrayView(){
return myArrayView;
}
}
если вы не хотите, чтобы изменить содержимое от внешнего возврата копии вашего частного объекта массива. используйте глубокое клонирование или мелкое клонирование соответственно. – Vishrant
«Если у меня ... есть геттер, который возвращает массив» - * почему у вас есть это? Вам не нужен геттер для всего. – user2357112
Оборонительные копии? То же самое и любое изменяемое состояние - если вы не хотите его раскрывать, вам нужно вернуть копии или неизменные объекты. –