2011-07-25 33 views
95

Tratando de utilizar el siguiente código:"Instanciando" una lista en Java?

List<Integer> list = new List<Integer>(); 

me sale el siguiente mensaje de error:

java.util.List es abstracta; No se pueden crear instancias

Lo que significa esto y por qué no puedo inicializar un List de la misma manera que lo haría un ArrayList?

Respuesta

20

Uso List<Integer> list = new ArrayList<Integer>();

+2

Esta es la manera de hacerlo. – Doug

+2

+1 por tener el dedo desencadenante más rápido :-) – Kal

136

En Java, List es una interfaz. Es decir, no se puede crear una instancia directamente.

En su lugar, puede usar ArrayList, que es una implementación de esa interfaz que utiliza una matriz como su almacén de respaldo (de ahí el nombre).

Desde ArrayList es una especie de List, puede upCast fácilmente:

List<T> mylist = new ArrayList<T>(); 

Esto está en contraste con .NET, donde, desde la versión 2.0, List<T> es la implementación predeterminada de la interfaz IList<T> .

26

List es una interfaz, no una clase concreta.
Una interfaz es solo un conjunto de funciones que una clase puede implementar; no tiene sentido crear una interfaz.

ArrayList es una clase concreta que le sucede a implementar esta interfaz y todos los métodos en el mismo.

3

Un List no es una cosa real en Java. Es una interfaz, una forma de definir cómo se permite que un objeto interactúe con otros objetos. Como tal, nunca puede ser instanciado. Un ArrayList es una implementación de la interfaz List, como una lista vinculada, y así sucesivamente. Úselos en su lugar.

3

Un List en Java es una interfaz que define ciertas cualidades una "lista" debe tener. Las implementaciones de listas específicas, como ArrayList, implementan esta interfaz y explican cómo funcionan los diversos métodos. ¿Qué estás tratando de lograr con esta lista? Lo más probable es que una de las listas integradas funcione para usted.

9

List es la interfaz, no una clase por lo que no se pueden crear instancias. ArrayList es muy probable que lo que está buscando:

ArrayList<Integer> list = new ArrayList<Integer>();

Una interfaz en Java define esencialmente un modelo para la clase - una clase que implementa una interfaz tiene que proporcionar implementaciones de los métodos de la lista define. Pero la implementación real depende completamente de la clase implementadora, ArrayList en este caso.

El JDK también proporciona LinkedList - una implementación alternativa que más se ajusta a la interfaz de la lista.Funciona de manera muy diferente al ArrayList que se encuentra debajo y, como tal, tiende a ser más eficiente para agregar/eliminar elementos a la mitad de la lista, pero para la gran mayoría de los casos de uso es menos eficiente. ¡Y, por supuesto, si quisieras definir tu propia implementación, es perfectamente posible!

En resumen, no se puede crear una lista porque es una interfaz que no contiene ningún código de hormigón - ese es el trabajo de las clases que implementan esa lista, de los cuales ArrayList es el más utilizado por el momento (y con razón!)

También vale la pena señalar que en C# a List es una clase, no una interfaz, eso es IList. El mismo principio se aplica sin embargo, solo con diferentes nombres.

+0

Creo que quisiste escribir 'nueva ArrayList' en tu fragmento de código :) –

+0

¡Lo hice, gracias por la edición! – berry120

Cuestiones relacionadas