В интерфейсе Java 9 List
, Set
и Map
у нас есть of
метод, который поддерживает varargs (static <E> List<E> of(E... elements)
), так что зачем нужны отдельные методы с аргументами от одного до десяти?
static <E> List<E> of(E e1) //Returns an unmodifiable list containing one elements.
static <E> List<E> of(E e1, E e2) //Returns an unmodifiable list containing two elements.
static <E> List<E> of(E e1, E e2, E e3) //Returns an unmodifiable list containing three elements.
static <E> List<E> of(E e1, E e2, E e3, E e4) //Returns an unmodifiable list containing four elements.
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5) //Returns an unmodifiable list containing five elements.
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6) //Returns an unmodifiable list containing six elements.
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) //Returns an unmodifiable list containing seven elements.
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) //Returns an unmodifiable list containing eight elements.
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) //Returns an unmodifiable list containing nine elements.
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) //Returns an unmodifiable list containing ten elements.
Чтобы создать список с более чем тремя элементами, метод List.of
, поддерживающий varargs, вызывает new ImmutableCollections.ListN<>(elements);
. То же самое для List<E> of(E e1, E e2, E e3)
- List<E> of(E e1, E e2, E e3,....E e10)
.
Реализация метода List.of
, поддерживающего varargs
static <E> List<E> of(E... elements) {
switch (elements.length) { // implicit null check of elements
case 0:
@SuppressWarnings("unchecked")
var list = (List<E>) ImmutableCollections.EMPTY_LIST;
return list;
case 1:
return new ImmutableCollections.List12<>(elements[0]);
case 2:
return new ImmutableCollections.List12<>(elements[0], elements[1]);
default:
return new ImmutableCollections.ListN<>(elements);
}
}
Реализация метода List.of
, поддерживающего 10 элементов.
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5,
e6, e7, e8, e9, e10);
}