Java Programación: todo sobre los genéricos
Uno de los objetivos de diseño originales para Java era mantener el lenguaje lo más sencillo posible. Desarrollador del lenguaje tuvo algunas características innecesariamente complicados de C ++ y los arrojó por la ventana. El resultado fue un lenguaje que era elegante y elegante. Algunas personas dijeron que el lenguaje era demasiado elegante.
Así que después de varios años de discusiones y peleas, Java se convirtió en un poco más complicado. Para el año 2004, tenía Java enum tipos, mejorado para bucles, importación estática, y algunas otras nuevas características interesantes. Pero el sobre hablado novedad más fue la introducción de los genéricos.
Lista de arreglopersonas = new ArrayList () -
El uso de cualquier cosa como
Personas ArrayList = new ArrayList () -
En aquellos días, un Lista de arreglo podría almacenar casi cualquier cosa que quería poner en él - un número, una Cuenta, la Habitación, la Cuerda . . . cualquier cosa. los Lista de arreglo clase era muy versátil, pero con esta versatilidad llegó algunos dolores de cabeza. Si se puede poner cualquier cosa en un Lista de arreglo, no se podía predecir fácilmente lo que se obtendría a partir de un Lista de arreglo.
En particular, no se puede escribir fácilmente código que asumido que habías guardado ciertos tipos de valores en el Lista de arreglo. He aquí un ejemplo:
Cosas ArrayList = new ArrayList () - things.add (nueva cuenta ()) - Cuenta myaccount = things.get (0) - // No utilice este. ES MALO CODE.
En la tercera línea, la llamada a get (0) toma el valor más antiguo en el cosas colección. La llamada a get (0) está bien, pero entonces el compilador se atraganta con el intento de cesión a mi cuenta. Usted obtiene un mensaje en la tercera línea que dice que todo lo que recibe de la cosas lista no se pueden rellenar en el mi cuenta variable.
Usted recibe este mensaje porque, en el momento en que el compilador alcanza la tercera línea, se ha olvidado que el elemento añadido en la segunda línea fue de tipo Cuenta!
La introducción de los genéricos soluciona este problema:
Lista de arreglocosas = new ArrayList () -things.add (nueva cuenta ()) - Cuenta myaccount = things.get (0) - // utilizar el código VEZ. ES BUENO CODE.
Adición
Java 5.0 añadió genéricos a Java. Pero poco después del nacimiento de Java 5.0, los programadores se dieron cuenta lo torpe el código de genéricos puede ser. Después de todo, usted puede crear los genéricos dentro de los genéricos. Un Lista de arreglo puede contener un montón de arrays, cada uno de los cuales puede ser una Lista de arreglo. Así que usted puede escribir
Lista de arreglo[]> Lío = new ArrayList []> () -
Toda la repetición en ese desorden declaración proporciona a los programadores un dolor de cabeza! Para evitar esta fealdad, Java 7 y versiones posteriores tienen una operador de diamante, lt;>. El operador de diamantes dice Java para reutilizar lo increíblemente complicado las cosas que pones en la parte anterior de la declaración genérica.
En este ejemplo, el lt;> Java le dice a la reutilización
Lista de arreglo[]> Lío = new ArrayListlt;>() -
En Java 7 y versiones posteriores, puede escribir cualquiera de estos desorden declaraciones - la declaración original, desagradable con dos apariciones de Lista de arreglo
Sí, el código simplificado sigue complicado. Pero sin todo el Lista de arreglo