Добавить объекты в список длинных

Я хочу добавить длинный объект в список длинных, но получаю ошибку, которую не понимаю

У меня есть следующий минимальный пример:

package main;

import java.util.List;

public class Test {

    public static void main(String[] args) {
        
        List<Long> LongList = List.of((long) 3);
        LongList.add((long) 2);
    }

}

Сообщение об ошибке:

Исключение в потоке "основной" java.lang.UnsupportedOperationException в java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) в java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147) в main.Test.main(Test.java:10)

Мне нужен формат Long, и я попытался изменить способ преобразования в long. Кроме того, я попытался указать позицию, куда добавить явно, но ничего не изменилось.

Вы внимательно изучили документацию по List.of?

Jon Skeet 02.04.2023 15:45

О черт. Спасибо.... В List.of не было необходимости... Я просто использую список массивов. Я полностью упустил из виду очевидное.

David Klein 02.04.2023 15:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Из документации List::of (docs.oracle.com):

Возвращает неизменяемый список, содержащий один элемент. Подробнее см. в разделе Неизменяемые списки.

Вот почему вызов add(...) приводит к UnsupportedOperationException. Если мы хотим изменить созданный список, нам нужно будет создать изменяемый список, например:

List<Long> LongList = new ArrayList<>(List.of((long) 3));
LongList.add((long) 2);

Демонстрация идеи

или:

List<Long> LongList = new ArrayList<>();
LongList.add((long) 3);
LongList.add((long) 2);

Демонстрация идеи


Некоторые замечания по коду:

  • Имена переменных должны быть написаны lowerCamelCase, а не UpperCamelCase (LongList -> longList)
  • Вместо приведения литералов 2 и 3 к long мы можем использовать long-литералы 2L и 3L

Спасибо :) Я только учусь программировать, поэтому ваши отзывы очень ценны.

David Klein 02.04.2023 15:57

Вы инициализировали переменную списка с помощью метода List.of(). Вот почему ваш список неизменен. В него нельзя добавлять предметы. Это также можно увидеть в сообщении об ошибке.

Пожалуйста, инициализируйте переменную с новым экземпляром ArrayList. Затем вы можете начать добавлять в него элементы.

List<Long> longList = new ArrayList<>():
longList.add(3L);
longList.add(2L);

Другие вопросы по теме