В духе Лучшие практики: всегда возвращайте ____, никогда не ____, я сталкиваюсь с аналогичным вопросом в своем предстоящем переход от JDK1.4.2 к JDK5 и более. (Да, я знаю, JDK1.4.2 - EOL!;-)).
Для функций, возвращающих коллекцию (которые не просто коллекции свойств), я всегда предпочитаю (в JDK1.4.2) возвращать Array вместо общего списка, потому что
- он применяет возвращаемый тип (
MyObject[]
вместо List of Objects, гораздо более тип-безопасный) на статическом уровне, как на уровне 'compilation') - он предлагает символ "только для чтения" возвращенной коллекции (сложнее добавить элемент в коллекцию, хотя это не так строго, как ключевое слово "только для чтения" в С#). Это не то же самое, что сказать, что это "неизменный", поскольку ссылки внутри массива все еще могут быть изменены...
Конечно, я всегда создаю этот возвращенный массив (я не выставляю никакого "внутреннего" массива)
Теперь, в JDK5 и более, я мог бы использовать List<MyObject>
, если захочу.
Каковы веские причины для возврата MyObject[]
вместо List или Collection<MyObject>
при кодировании в java5?
Бонус, если используется Collection<MyObject>
, возможно ли:
- применять атрибут "только для чтения" для возвращаемой коллекции? (нет
add()
илиremove()
) - обеспечить неизменный аспект возвращенной коллекции? (даже ссылки этой коллекции не могут быть изменены)
PS: JavaGenericFAQ не имел этого.