Programación java: todo sobre los genéricos

Video: Generics en Java (Clases y objetos genericos) - Tutorial

Uno de los objetivos de diseño originales para Java era mantener el lenguaje lo más sencillo posible. desarrollador de la lengua tomó 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.

Video: Curso Java. Programación genérica. Qué es Por qué utilizarla. Vídeo 164

Así que después de varios años de discusión y peleas, Java se convirtió en un poco más complicado. Para el año 2004, tenía Java enumeración tipos, mejorado para bucles, importación estática, y algunas otras nuevas características interesantes. Pero la nueva hablado acerca característica más fue la introducción de los genéricos.

Lista de arreglo personas = new ArrayList() -

El uso de nada por el estilo era nuevo en Java 5.0. En viejo estilo de Java, se escribiría

personas ArrayList = new ArrayList () -

En esos días, una Lista de arreglo podría almacenar casi cualquier cosa que quería poner en él - un número, una Cuenta, un Habitación, un 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 una Lista de arreglo.

Video: Listas Enlazadas Genéricas en Java.© UPV

En particular, no se puede escribir fácilmente código que asumió que había almacenado 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 USE ESTE. Su código BAD.

En la tercera línea, la llamada a obtener (0) agarra el valor más antiguo en el cosas colección. La llamada a obtener (0) está bien, pero entonces el compilador se ahoga con el intento de cesión a mi cuenta. Aparece un mensaje en la tercera línea diciendo que todo lo que se obtiene 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 este código en su lugar. Es BUENO CÓDIGO.

añadiendo en dos lugares le dice al compilador que cosas víveres Cuenta casos - nada más. Por lo tanto, en la tercera línea en el código anterior, se obtiene un valor de la cosas colección. Entonces, porque cosas Sólo tiendas Cuenta objetos, se pueden hacer mi cuenta referirse a ese nuevo valor.

Java 5,0 añadió genéricos para Java. Sin embargo, poco después del nacimiento de Java 5.0, los programadores se dieron cuenta lo torpe puede ser el código para los genéricos. Después de todo, puede crear genéricos dentro de los genéricos. Un Lista de arreglo puede contener un montón de matrices, cada uno de los cuales puede ser una Lista de arreglo. Para que pueda escribir

Lista de arreglo[] Gt; lío = new ArrayList[] Gt; () -

Toda la repetición en ese lío declaración da a los programadores un dolor de cabeza! Para evitar esta fealdad, Java 7 y versiones posteriores tienen una operador de diamante, lt; gt;. El operador de diamantes dice Java para reutilizar cualquier material increíblemente complicada se pone en la parte anterior de la declaración genérica.

En este ejemplo, la lt; gt; dice Java para reutilizar [] Gt;, a pesar de que se escribe [] Gt; sólo una vez. Así es como se ve la aerodinámica código Java 7:

Lista de arreglo[] Gt; lío = new ArrayListlt; gt;() -

En Java 7 y versiones posteriores, puede escribir cualquiera de estos lío declaraciones - la, declaración desagradable original con dos apariciones de Lista de arreglo[], o la aerodinámica (sólo ligeramente desagradable) declaración con el operador de diamantes y sólo uno Lista de arreglo[] ocurrencia.

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

Artículos Relacionados