2012-02-16 16 views
7

Como C++ OLDTIMER he conseguido resolver mi problema, pero no puedo envolver mi cabeza en torno a los mecanismos de Java subyacentes aquí:Lista de Java vs ArrayList

Vector<Object> x = new Vector<Object>();  // OK 
ArrayList<Object> y = new ArrayList<Object>(); // OK 
List<Object> zzz = new ArrayList<Object>();  // OK solves problem below but question remains 
List<Object> z = new List<Object>();   // WHY? Compiler error: Cannot instantiate 

Respuesta

14

List es una interfaz, algo así como una clase con alguna = 0 métodos en C++. No puedes instanciarlo.

Pero ArrayList<T> "hereda" List<T> (o en términos de Java, lo implementa), por lo que esas referencias son compatibles con la asignación.

+0

Gracias a todos ustedes. – Adam

+0

Ustedes son muy rápidos – Adam

+0

@Adam - ¡aguarde a que llegue a los comodines en los genéricos de Java! :) Las respuestas tardan un poco más en aparecer. –

5

La lista es una interfaz, no puede inicializarla. ArrayList implementa List, por lo que puede asignar una instancia ArrayList a una variable List.

1

La lista no es clase, es una interfaz y no se puede crear una instancia del objeto de interfaz.

ArrayList es la clase que era implementar la interfaz de lista puede tan capaz de una instancia del objeto ArrayList y asignar al objeto de lista

1

El List es una interfaz. No puede crear en la instancia de una interfaz usando el operador new. Es por eso que la línea List<Object> z = new List<Object>(); da error. Solo las clases pueden ser instanciadas.

0

List es interface y no se puede crear una instancia de la interfaz.

Se utiliza para implementar polimorfismo. es decir, una referencia de tipo de interfaz puede contener el objeto de cualquier clase que implements.

List<Object> zzz = new ArrayList<Object>(); 

funciona, porque ArrayList implementa la lista.

1

"Interfaz" es como un protocolo que un objeto debe cumplir.

+0

Interesante enfoque para usar protocolos como una analogía. Aunque un poco más de texto, qué es "eso" y qué no, las cosas un poco más claras. –

+1

Nunca escuché el protocolo en este contexto. Pero entiendo lo que quieres decir. Prefiero el término contrato: http://en.wikipedia.org/wiki/Design_by_contract – Adam

+0

@ Adam. Estoy de acuerdo, el contrato es una palabra mejor. – Benjamin

2

Sí. Porque List es una interfaz y en Java no se puede crear una instancia de una interfaz. Solo puede crear instancias de una clase.

ArrayList es una clase que está implementando la lista <> es por eso que puede instanciarlo. :)