Curiosidades programando Java

Hoy les voy a mostrar algunas curiosidades que se pueden hacer con código Java que puede que algunas sirvan y algunas pues solo para divertirse:

1.- Crear en línea una colección mediante una clase anónima y un bloque inicializador de instancia en lugar de hacerlo con Arrays.asList:

 

El inconveniente de usar Arrays.asList es que debido a que la lista se genera desde la raiz de un arreglo, estos por naturaleza tienen un tamaño definido y no puede redimensionarse por lo tanto la lista generada no soporta la operación   o alguna otra que intente modificar el tamaño y devuelve  .

 

Con la clase anónima es posible seguir modificando la colección creada con la notación de doble paréntesis, los primeros sirven para generar una clase anónima que hereda de   y los segundos paréntesis sirven para definir un bloque inicializador de instancia en donde invocamos el método   heredado de   y a diferencia de generar la lista en ase al método   en esta ocasión cualquier metodo que modifique la colección no lanzará la excepción  


2.- Comentario que se ejecuta con el truco de la nueva línea en unicode:

 

El resultado de ejecutar el código anterior es que la línea que se encuentra despues de   se ejecuta pues este símbolo unicode representa una nueva línea para el compilador, asombroso !!!


3.- Uniones o simulación de uniones en tipos genéricos que usan covarianza o contravarianza

 

Como se puede observar en el método estático   dentro del genérico covariante se utiliza el operador   para indicar que hereda y/o implementa alguna clase (abstracta o concreta) y/o interfaces, en palabras mas sencilas el genérico que se necesita debe de ser de algún tipo   que herede la clase abstracta   e implemente la interface  , en este caso es  .


Y por hoy creo que hasta aquí, tal vez agregue una segunda parte ...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El primero es bastante

El primero es bastante interesante, pero no es recomendado porque arraylist puede inicializarse con una collection lo cual elimina el problema de la mutabilidad:
 

No por eso deja de ser interesante. Igual de interesante es el efecto que la doble llave tiene es que permite visualizar más claramente el grafo del objeto.

Por ejemplo, si se tuviera la clase dirección con calle, ciudad, estado, país.

 

se podría inicializar así:

 

Obvio, si en vez de doble llave fuera simple y se pudiera omitir el new y los paréntesis sería más fácil de leer.

 

Esto es algo que nuevos lenguajes como Ceylon o Go hacen aunque no con bloques de instancia.

En Ceylon los parámetros del constructor se especifican en la declaración de la clase. El constructor es una función y los parámetros de las funciones pueden ser llamados (en mis propias palabras) cambiando paréntesis por llaves:

 

En Go, la inicialización de estructuras   se hace mediante el uso de llaves

Ejemplo Go

 

Y llevando las cosas más lejos aún, en ambos se pueden omitir los nombres, dejando versiones muy fáciles de leer:

Ceylon
 

Go
 

Esta es una de las razones por las cuales Javascript se volvió tan popular [citation needed], permitiendo especificar en JSON la estructura de los objetos.

Conceptos relacionados:

-
-

Imagen de ezamudio

tipo intersección

Ese último ejemplo realmente es un tipo intersección, no tipo unión.