Como inicializar o object List em Java?

Eu não posso inicializar uma lista como no código a seguir:

List supplierNames = new List(); supplierNames.add("sup1"); supplierNames.add("sup2"); supplierNames.add("sup3"); System.out.println(supplierNames.get(1)); 

Eu enfrento o seguinte erro:

Não é possível instanciar o tipo List

Como posso instanciar List ?

Se você verificar a API para a List verá que ela diz:

 Interface List 

Ser uma interface significa que ela não pode ser instanciada (nenhuma new List() é possível).

Se você verificar esse link, você encontrará algumas class que implementam a List :

Todas as classs de implementação conhecidas:

AbstractList , AbstractSequentialList , ArrayList , Lista de AttributeList , CopyOnWriteArrayList , LinkedList , RoleList , RoleUnresolvedList , Stack , Vector

Aqueles podem ser instanciados. Use seus links para saber mais sobre eles, ou seja: saber qual se adapta melhor às suas necessidades.

Os 3 mais utilizados são provavelmente:

  List supplierNames1 = new ArrayList(); List supplierNames2 = new LinkedList(); List supplierNames3 = new Vector(); 

Bônus:
Você também pode instanciá-lo com valores, de maneira mais fácil, usando a class Arrays , da seguinte maneira:

 List supplierNames = Arrays.asList("sup1", "sup2", "sup3"); System.out.println(supplierNames.get(1)); 

Mas observe que você não tem permissão para adicionar mais elementos a essa lista, pois ela é fixed-size .

JDK2

 List list = Arrays.asList("one", "two", "three"); 

JDK7

 //diamond operator List list = new ArrayList<>(); list.add("one"); list.add("two"); list.add("three"); 

JDK8

 List list = Stream.of("one", "two", "three").collect(Collectors.toList()); 

JDK9

 List list = List.of("one", "two", "three"); 

Além disso, existem muitas outras maneiras fornecidas por outras bibliotecas como o Guava .

 List list = Lists.newArrayList("one", "two", "three"); 

List é uma interface , você não pode instanciar uma interface, porque interface é uma convenção, quais methods devem ter suas classs. Para instanciar, você precisa de algumas realizações (implementações) dessa interface. Experimente o código abaixo com implementações muito populares da interface List:

 List supplierNames = new ArrayList(); 

ou

 List supplierNames = new LinkedList(); 

Você precisará usar ArrayList ou algo parecido.

List é uma interface.

Usa isto:

 import java.util.ArrayList; ... List supplierNames = new ArrayList(); 

List é uma interface e você não pode inicializar uma interface. Instantiate uma class de implementação em vez disso.

Gostar:

 List abc = new ArrayList(); List xyz = new LinkedList(); 

Lista é apenas uma interface, uma definição de uma lista genérica. Você precisa fornecer uma implementação dessa interface de lista. Dois mais comuns são:

ArrayList – uma lista implementada em um array

 List supplierNames = new ArrayList(); 

LinkedList – uma lista implementada como uma cadeia interconectada de elementos

 List supplierNames = new LinkedList(); 

Na maioria dos casos, você quer ArrayList simples – uma implementação da List

Antes da versão 7 do JDK

 List list = new ArrayList(); 

JDK 7 e posterior você pode usar o operador de diamante

 List list = new ArrayList<>(); 

Outras informações estão escritas aqui Documentação da Oracle – Coleções

Dependendo do tipo de lista que você deseja usar, algo como

 List supplierNames = new ArrayList(); 

Você deve ir.

List é a interface, ArrayList é uma implementação da interface List. Mais implementações que podem atender melhor às suas necessidades podem ser encontradas lendo os JavaDocs da interface List .

Se você quer apenas criar uma List imutável List com apenas um object, você pode usar esta API:

 List oneObjectList = Collections.singletonList("theOnlyObject”); 

Mais informações: docs

Lista é uma interface. Você não pode usar List para inicializá-lo.

  List supplierNames = new ArrayList(); 

Estas são algumas das classs impelidas,

 ArrayList, LinkedList, Vector 

Você poderia usar qualquer um de acordo com sua exigência. Cada uma dessas classs tem seus próprios resources.

Apenas no caso, qualquer um ainda persistente em torno desta questão. Porque, eu vejo um ou dois novos usuários novamente fazendo a mesma pergunta e todos dizendo então, Não , você não pode fazer isso, querida Prudence , Além de todas as respostas dadas aqui, eu gostaria de fornecer informações adicionais – Sim, você pode realmente do, List list = new List (); Mas ao custo de escrever implementações de todos os methods de Interfaces. A noção não é simplesmente List list = new List (); mas

 List list = new List(){ @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; } 

….. e assim por diante (não consigo escrever todos os methods.)

Este é um exemplo de class anônima . É correto quando alguém afirma, não , você não pode instanciar uma interface, e isso mesmo. Mas você nunca pode dizer, você pode escrever List list = new List (); mas, evidentemente, você pode fazer isso e é uma declaração difícil de fazer que você não pode fazer .