¿Cómo inicializar el objeto List<String> en Java?
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 List<String>
?
Si revisas la API , List
notarás que dice:
Interface List<E>
Al ser un interface
medio, no se puede instanciar (no new List()
es posible).
Si marca ese enlace, encontrará algunos class
que implementan List
:
Todas las clases de implementación conocidas:
AbstractList
,AbstractSequentialList
,ArrayList
,AttributeList
,CopyOnWriteArrayList
,LinkedList
,RoleList
,RoleUnresolvedList
,Stack
,Vector
Se pueden crear instancias de algunos de ellos (los que no están definidos como abstract class
). Utilice sus enlaces para saber más sobre ellos, es decir, para saber cuál se adapta mejor a sus necesidades.
Los 3 más utilizados probablemente sean:
List<String> supplierNames1 = new ArrayList<String>();
List<String> supplierNames2 = new LinkedList<String>();
List<String> supplierNames3 = new Vector<String>();
Bonificación:
también puedes crear una instancia con valores, de una manera más sencilla, usando Arrays
class
, de la siguiente manera:
List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));
Pero tenga en cuenta que no puede agregar más elementos a esa lista, ya que es fixed-size
.
No se puede crear una instancia de una interfaz, pero hay algunas 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
// 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"));
Además, hay muchas otras formas proporcionadas por otras bibliotecas como Guava .
List<String> list = Lists.newArrayList("one", "two", "three");
La lista es una interfaz , no puede crear una instancia de una interfaz, porque la interfaz es una convención, qué métodos deberían 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 List:
List<String> supplierNames = new ArrayList<String>();
o
List<String> supplierNames = new LinkedList<String>();