Есть веская причина не возвращать ссылку на внутренний атрибут MyObject[]
.Посредством ссылки вызывающий может внести изменения в массив.
Если нет причины, по которой результат должен быть List
, вы также можете вернуть копию массива:
public MyObject[] getAllMyObjects() {
MyObject[] result = new MyObject[allObjs.length];
system.ArrayCopy(allObjs, 0, result, 0, result.length);
return result;
}
Обновление , после добавления к вопросу: вы правы, если внутренний атрибут изменен на Список, его проще не изменять.
Причина, по которойкласс использует массив вместо списка может быть производительность.Если массив не изменяется (сильно) в течение жизни объекта и многократно повторяется, массив имеет меньше накладных расходов, чем List.
Если производительность является причиной использования массива, вы можете предотвратитьсоздание дополнительного объекта в получателе, сохраняя список с единственной целью его возврата, то есть:
allObjsList = Collections.unmodifiableList(createAllMyObjects());
allObjs = allObjsList.toArray(new MyObject[allObjsList.size()]);
используйте массив allObjs, как и раньше, и возвращайте сохраненный список в получателе:
public List<MyObject> getAllMyObjects() {
return allObjsList ;
}