initialize - list<string[]> java
¿Cómo inicializar el objeto List<String> en Java? (11)
Deberá usar ArrayList<String>
o similar.
List<String>
es una interfaz.
Utilizar esta:
import java.util.ArrayList;
...
List<String> supplierNames = new ArrayList<String>();
No puedo inicializar una lista como en el siguiente código:
List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));
Me enfrento al siguiente error:
No se puede crear una instancia del tipo
List<String>
¿Cómo puedo crear una instancia de la List<String>
?
Dependiendo del tipo de lista que quieras usar, algo como
List<String> supplierNames = new ArrayList<String>();
deberías ponerte en marcha
List es la interfaz, ArrayList es una implementación de la interfaz List. Puede encontrar más implementaciones que pueden satisfacer sus necesidades leyendo los API .
En la mayoría de los casos, usted quiere ArrayList
simple - una implementación de List
Antes de la versión 7 de JDK
List<String> list = new ArrayList<String>();
JDK 7 y posteriores pueden utilizar el operador de diamante.
List<String> list = new ArrayList<>();
Más información está escrita aquí. Documentación de Oracle - Colecciones.
La lista es solo una interfaz, una definición de alguna lista genérica. Debe proporcionar una implementación de esta interfaz de lista. Los dos más comunes son:
ArrayList - una lista implementada sobre una matriz
List<String> supplierNames = new ArrayList<String>();
LinkedList - una lista implementada como una cadena de elementos interconectados
List<String> supplierNames = new LinkedList<String>();
La lista es una interfaz y no puede inicializar una interfaz. Instalar una clase de implementación en su lugar.
Me gusta:
List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
La lista es una interfaz. No puedes usar List para inicializarlo.
List<String> supplierNames = new ArrayList<String>();
Estas son algunas de las clases impulsadas por listas,
ArrayList, LinkedList, Vector
Usted podría utilizar cualquiera de esto según su requisito. Estas clases tienen sus propias características.
Lista es una interfaz , no puede crear una instancia de una interfaz, ya que la interfaz es una convención, qué métodos deben tener sus clases. Para crear una instancia, necesita algunas realizaciones (implementaciones) de esa interfaz. Pruebe el siguiente código con implementaciones muy populares de la interfaz de lista:
List<String> supplierNames = new ArrayList<String>();
o
List<String> supplierNames = new LinkedList<String>();
No se puede crear una instancia de una interfaz, pero hay pocas implementaciones:
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
List<String> list = List.of("one", "two", "three");
Además, hay muchas otras formas proporcionadas por otras bibliotecas como Guava .
List<String> list = Lists.newArrayList("one", "two", "three");
Por si acaso, alguien que todavía se detenga en torno a esta pregunta. Porque, veo que uno o dos nuevos usuarios vuelven a hacer la misma pregunta y todos dicen entonces: No , no puedes hacer eso, Querida Prudencia . Aparte de todas las respuestas que se dan aquí, me gustaría proporcionar información adicional. Sí, realmente puedes do, List list = new List (); Pero a costa de escribir implementaciones de todos los métodos de Interfaces. La noción no es simplemente List list = new List (); pero
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;
}
..... y así sucesivamente (no puedo escribir todos los métodos).
Este es un ejemplo de clase anónima . Es correcto cuando alguien dice: No , no se puede crear una instancia de una interfaz, y eso es correcto. Pero nunca se puede decir, usted puede escribir la lista de la lista = new List (); pero, evidentemente, puedes hacer eso y esa es una afirmación difícil de hacer que no puedes hacer .
Si revisa la API para la List
, notará que dice:
Interface List<E>
Ser una interface
significa que no se puede crear una instancia (no es posible una new List()
).
Si verifica ese enlace, encontrará algunas class
que implementan la List
:
Todas las clases de implementación conocidas:
AbstractList
,AbstractSequentialList
,ArrayList
,AttributeList
,CopyOnWriteArrayList
,LinkedList
,RoleList
,RoleUnresolvedList
,Stack
,Vector
Esos pueden ser instanciados. Utilice sus enlaces para saber más sobre ellos, IE: para saber cuál se ajusta mejor a sus necesidades.
Los 3 más utilizados son probablemente:
List<String> supplierNames1 = new ArrayList<String>();
List<String> supplierNames2 = new LinkedList<String>();
List<String> supplierNames3 = new Vector<String>();
Prima:
También puede crear una instancia con valores, de una manera más fácil, utilizando la class
Arrays
, de la siguiente manera:
List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));
Pero tenga en cuenta que no está permitido agregar más elementos a esa lista, ya que es fixed-size
.
Si solo desea crear una List<T>
inmutable List<T>
con solo un objeto en ella, puede usar esta API:
List<String> oneObjectList = Collections.singletonList("theOnlyObject”);
Más información: docs