Главное отличие состоит в том, что Collections.emptyList()
возвращает непреложный список, то есть список, к которому вы не можете добавить элементы.
В редких случаях, когда вы do хотите изменить возвращенный список, это, таким образом, не является вариантом.
Я бы сказал, что возвращение неизменяемого списка прекрасно (и даже предпочтительный вариант), если в договоре (документации) явно не указано иное.
Кроме того, emptyList()
might not create a new object with each call.
Реализации этого метода не нужно создавать отдельный объект List для каждого вызова. Использование этого метода, вероятно, будет иметь сопоставимые затраты на использование поля с похожими именами. (В отличие от этого метода, поле не обеспечивает безопасность типа.)
Реализация emptyList
выглядит следующим образом:
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Так что, если ваш метод (который возвращает пустой список) называется очень часто , этот подход может даже дать вам немного лучшую производительность как процессора, так и памяти.
Итак, будет ли 'Collections.emptyList()' более подходящим, скажем, проверка ошибок и тому подобное? – mre
Да, я бы так сказал. – aioobe
Клиенты API не получат 'NullPointerException', возвращая' Collections.emptyList() 'вместо' null'. – realPK