Основное отличие состоит в том, что Collections.emptyList()
возвращает неизменный список, то есть список, в который нельзя добавлять элементы. (То же самое относится к List.of()
, представленному в Java 9.)
В тех редких случаях, когда вы делаете хотите изменить возвращаемый список, Collections.emptyList()
и List.of()
, таким образом, не - хороший выбор.
Я бы сказал, что возвращение неизменяемого списка совершенно нормально (и даже предпочтительным способом), если в контракте (документации) явно не указано иное.
Кроме того, emptyList()
может не создавать новый объект при каждом вызове.
Реализации этого метода не должны создавать отдельный объект List для каждого вызова. Использование этого метода может иметь сравнимую стоимость с использованием одноименного поля. (В отличие от этого метода, поле не обеспечивает безопасность типов.)
Реализация emptyList
выглядит следующим образом:
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Так что, если ваш метод (который возвращает пустой список) вызывается очень часто, этот подход может даже дать вам немного лучшую производительность как с точки зрения процессора, так и памяти.