Collections.emptyList()
- это метод static
, который возвращает List<T>
, то есть выражение Collections.emptyList()
будет выполнять метод emptyList()
, а его значение будет List<T>
. Поэтому вы можете передать это выражение только методам, для которых требуется аргумент List
.
Collections::emptyList
- это ссылка на метод, который может реализовать функциональный интерфейс, у которого единственный метод имеет совпадающую сигнатуру.
A Supplier<List<T>>
- это функциональный интерфейс, имеющий единственный метод, который возвращает List<T>
, который соответствует сигнатуре Collections.emptyList()
. Следовательно, метод - такой как Optional
orElseGet(Supplier<? extends T> other)
- для которого в вашем примере требуется Supplier<? extends List<Student>>
- может принять ссылку на метод Collections::emptyList
, которая может реализовать этот интерфейс.