Почему фабрика коллекций Java 9 имеет отдельные методы для каждого аргумента, если в ней поддерживаются varargs

В интерфейсе 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);
}

person Joby Wilson Mathews    schedule 28.10.2020    source источник
comment
@ernest_k Он говорит о производительности при использовании метода varargs, но все же методы с 3–10 параметрами вызывают другой метод varargs, то есть ImmutableCollections.ListN (E ... input).   -  person Joby Wilson Mathews    schedule 28.10.2020
comment
Вы должны записать соображения в свой вопрос, а не добавлять его в качестве комментария. В противном случае ваш вопрос - просто дубликат.   -  person Holger    schedule 28.10.2020
comment
Первый комментарий к связанному вопросу может быть интересен именно вам.   -  person Naman    schedule 28.10.2020