Как инициализировать объект List <String> в Java?
Я не могу инициализировать List как в следующем коде:
List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));
Я сталкиваюсь со следующей ошибкой:
Невозможно создать тип List<String>
Как я могу создать экземпляр List<String>
?
Ответы
Ответ 1
Если вы проверите API для List
, вы заметите, что он говорит:
Interface List<E>
Будучи interface
, означает, что он не может быть создан (возможно new List()
).
Если вы проверите эту ссылку, вы найдете несколько class
es, которые реализуют List
:
Все известные классы реализации:
AbstractList
, AbstractSequentialList
, ArrayList
, AttributeList
, CopyOnWriteArrayList
, LinkedList
, RoleList
, RoleUnresolvedList
, Stack
, Vector
Те могут быть созданы. Используйте их ссылки, чтобы узнать о них больше, I.E: знать, что лучше подходит вашим потребностям.
3 наиболее часто используемых, возможно, следующие:
List<String> supplierNames1 = new ArrayList<String>();
List<String> supplierNames2 = new LinkedList<String>();
List<String> supplierNames3 = new Vector<String>();
Bonus:
Вы также можете создать его со значениями более простым способом, используя Arrays
class
, как показано ниже:
List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));
Но обратите внимание, что вам не разрешено добавлять в этот список больше элементов, так как он fixed-size
.
Ответ 2
Не могу создать интерфейс, но есть несколько реализаций:
JDK2
List<String> list = Arrays.asList("one", "two", "three");
JDK7
//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
JDK8
List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());
JDK9
// creates immutable lists, so you can't modify such list
List<String> immutableList = List.of("one", "two", "three");
// if we want mutable list we can copy content of immutable list
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));
Плюс есть много других способов, предоставляемых другими библиотеками, такими как Guava.
List<String> list = Lists.newArrayList("one", "two", "three");
Ответ 3
Список - это интерфейс, вы не можете создавать интерфейс, потому что интерфейс - это соглашение, какие методы должны иметь ваши классы. Чтобы создать экземпляр, вам понадобятся некоторые реализации (реализации) этого интерфейса. Попробуйте приведенный ниже код с очень популярными реализациями интерфейса List:
List<String> supplierNames = new ArrayList<String>();
или
List<String> supplierNames = new LinkedList<String>();
Ответ 4
Вам нужно будет использовать ArrayList<String>
или такой.
List<String>
- это интерфейс.
Используйте это:
import java.util.ArrayList;
...
List<String> supplierNames = new ArrayList<String>();
Ответ 5
Список - это интерфейс, и вы не можете инициализировать интерфейс. Создайте вместо этого исполняемый класс.
Как
List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
Ответ 6
В большинстве случаев вам нужна простая ArrayList
- реализация List
Перед версией JDK 7
List<String> list = new ArrayList<String>();
JDK 7, а затем вы можете использовать алмазный оператор
List<String> list = new ArrayList<>();
Дополнительная информация написана здесь Документация Oracle - Коллекции
Ответ 7
Список - это просто интерфейс, определение какого-то общего списка. Вам необходимо обеспечить реализацию этого интерфейса списка. Двумя наиболее распространенными являются:
ArrayList - список, реализованный по массиву
List<String> supplierNames = new ArrayList<String>();
LinkedList - список, реализованный как взаимосвязанная цепочка элементов
List<String> supplierNames = new LinkedList<String>();
Ответ 8
В зависимости от того, какой список вы хотите использовать, что-то вроде
List<String> supplierNames = new ArrayList<String>();
должен вас поймать.
Список - это интерфейс, ArrayList - это одна реализация интерфейса List. Дополнительные реализации, которые могут лучше соответствовать вашим потребностям, можно найти, прочитав JavaDocs интерфейса List.
Ответ 9
Если вы просто хотите создать неизменный List<T>
только с одним объектом, вы можете использовать этот API:
List<String> oneObjectList = Collections.singletonList("theOnlyObject");
Больше информации: документы
Ответ 10
Список - это интерфейс. Вы не можете использовать List для его инициализации.
List<String> supplierNames = new ArrayList<String>();
Это некоторые из классов, переименованных в Listed,
ArrayList, LinkedList, Vector
Вы можете использовать любое из них в соответствии с вашим требованием. Эти классы имеют свои особенности.
Ответ 11
На всякий случай, кто-то все еще задерживается вокруг этого вопроса. Потому что, я вижу, что один или два новых пользователя снова задают один и тот же вопрос, и все говорят тогда: "Нет, вы не можете этого сделать, Дорогая Пруденс". Помимо всех ответов, приведенных здесь, я хотел бы предоставить дополнительную информацию -
Да, вы действительно можете сделать, Список списка = новый список();
Но ценой написания реализаций всех методов интерфейсов.
Понятие не просто List list = new List(); но
List<Integer> list = new List<Integer>(){
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
return false;
}
..... и т.д. (Кант записывает все методы.)
Это пример Анонимного класса. Правильно, когда кто-то заявляет, Нет, вы не можете создать интерфейс, и это правильно. Но вы никогда не сможете сказать: Вы не можете записать список List = new List();, но, очевидно, вы можете сделать это, и это жесткое выражение, которое вы не можете сделать.
Ответ 12
Мы создали союз-, чтобы упростить задачу 1: как преобразовать X
в Y
(например, String
в Integer
). Построение объекта также является своего рода преобразованием, поэтому у него есть простая функция для создания Map
, List
, Set
:
import io.thedocs.soyuz.to;
List<String> names = to.list("John", "Fedor");
Пожалуйста, проверьте это - у него много других полезных функций