Могу ли я использовать Collections.EMPTY_LIST без UncheckedException?

Есть ли способ использования Collection.EMPTY_LIST в моей программе на Java, совместимый с Generics.

Я знаю, что могу просто объявить его сам, но мне просто любопытно узнать, есть ли в JDK способ сделать это.

Что-то вроде users = Collections<User>.EMPTY_LIST;

Как создавать пользовательские общие типы в Python (50/100 дней Python)
Как создавать пользовательские общие типы в Python (50/100 дней Python)
Помимо встроенных типов, модуль типизации в Python предоставляет возможность определения общих типов, что позволяет вам определять типы, которые могут...
15
0
7 387
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Сделав следующее:

List<User> users = Collections.emptyList();

Тип возвращаемого списка от Collections.emptyList(); будет предполагаемый как String из-за левой части назначения. Однако, если вы предпочитаете не делать этого вывода, вы можете определить его явно, выполнив следующие действия:

List<User> users = Collections.<User>emptyList(); 

В данном конкретном случае для большинства людей это может показаться избыточным (на самом деле, я видел очень мало кода, который использует явные аргументы типа), однако для метода с подписью: void doStuff(List<String> users) это было бы идеально clean для того, чтобы вызвать doStuff() с явным аргументом типа следующим образом:

doStuff(Collections.<String>emptyList());

каждый раз, когда вы записываете явный аргумент типа в метод, бог убивает котенка (я думаю, что это сказал Джош Блох)

Andreas Petersson 12.05.2009 12:38

List<User> users = Collections.emptyList();

После создания пустого списка я бы рекомендовал сохранить его как константу, а не создавать каждый раз новый.

Кроме того, использование Collections.emptyList() по сравнению с new ArrayList(0) дает преимущества в производительности, хотя разница, вероятно, небольшая. Список, возвращаемый функцией emptyList (), оптимизирован, чтобы быть неизменяемым пустым списком. Например, метод size () просто возвращает 0, а не поиск по полю или что-то еще, что делает ArrayList.

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