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 arreglo personas = new ArrayList() -

El uso de cualquier cosa como era nuevo en Java 5.0. En viejo estilo de Java, se escribiría

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 arreglo cosas = new ArrayList() -things.add (nueva cuenta ()) - Cuenta myaccount = things.get (0) - // utilizar el código VEZ. ES BUENO CODE.

Adición en dos lugares le dice al compilador que cosas tiendas Cuenta casos - nada más. Así, en la tercera línea en el código anterior, se obtiene un valor de la cosas colección. Entonces, debido cosas Sólo tiendas Cuenta objetos, usted puede hacer mi cuenta referirse a ese nuevo valor.

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 []>, a pesar de que se escribe []> sólo una vez. Así es como se ve la aerodinámica código Java 7:

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[], o (sólo ligeramente desagradable) Declaración racionalizado con el operador de diamantes y sólo uno Lista de arreglo[] ocurrencia.

Sí, el código simplificado sigue complicado. Pero sin todo el Lista de arreglo[] la repetición, el código simplificado es menos engorroso. El operador de diamantes Java 7 quita una oportunidad para que usted pueda copiar algo de forma incorrecta y tener un gran error en el código.




» » » » Java Programación: todo sobre los genéricos