Reflection API (VI) – Tipos Genericos

Los tipos genéricos fueron implementados como una transformación en tiempo de ejecución. Los tipos genéricos no permiten conocer en tiempo de ejecución el tipo con el que se ha parametrizado, es decir, en tiempo de ejecución no podemos distinguir si un atributo es Map o es Map. Cuando utilizamos tipos genéricos el compilador genera el mismo bytecode que cuando utilizamos tipos no genéricos, insertando en tiempo de ejecución el código necesarios para realizar un cast para convertirlos en el tipo apropiado en cada acceso. Debido a que el bytecode es idéntico, la información sobre el tipo del parámetro es almacenada…

Continuar

Primer Vistazo a Google Guava

Google Guava es una librearía utilizada por Google en sus proyectos internos durante bastantes años y que fue liberada durante el año 2009. Cuando hablamos de Gueva nos referimos a un conjunto de herramientas que están diseñados para mejorar el desarrollo y la productividad. Lo que pretende Guava es hacernos la vida más fácil ofreciéndonos utilidades muy utilizadas pero que no están implementadas en la JDK. Algunas de sus principales utilidades son: Utilidades Básicas: Permite un uso más sencillo de las funcionalidades de Java, haciendo más sencillo el trabajo con pre condiciones, nulls, excepciones, y la implementación de los métodos…

Continuar

Reflection API (V) – Arrays

Un array es un objeto que contiene referencias de objetos con un número fijo de componentes del mismo tipo; la longitud de un array no se puede modificar. Para crear un array es necesario conocer su longitud y el tipo de los datos que va a contener. Cada uno de sus elementos puede ser un tipo primitivo, un objeto u otro array. El manejo de arrays utilizando reflexión es algo diferente del resto de objetos. Lo primero que podemos hacer es comprobar si el objeto que estamos tratando es un array, ésto lo haremos utilizando el método Class.isArray. Cuando ya…

Continuar

Reflection API (IV) – Métodos

Usando reflexión podemos acceder a los métodos de una clase en tiempo de ejecución. Para ello podemos utilizar la clase Method. Usar la reflexión nos permite acceder a los métodos de una clase y determinar si éste ha sido heredado o pertenece a la clase que estamos utilizando, algo que es imposible saber cuando llamamos a un método sin reflexión. Obtención de los Métodos de una Clase Para obtener los métodos de una clase utilizaremos el método getMethods de la clase Class y nos devolverá un array de objetos Method.

Continuar

Reflection API(II) – Utilizando los Constructores

Los constructores son utilizados en la creación de objetos, que son la instanciación de una clase. Por lo general llevan a cabo las operaciones necesarias para inicializar la clase antes de que se invocan los métodos o se acceda a los campos. La Reflexión nos permite conocer y recuperar los constructores de una clase y obtener información de su declaración, como los modificadores, los parámetros, las anotaciones, y excepciones que se producen. También tendremos la posibilidad de instanciar una clase mediante la utilización de estos constructores. El API de Reflexión nos proporciona la clase java.lang.reflect.Constructor para el manejo de los constructores.

Continuar

Reflection API(I) – Manejo de clases

Cuando se compila el código fuente de un programa se pierde la información de la estructura del programa pero se conserva ésta información en forma de metadatos. La reflexión es utilizada principalmente para acceder a esta información en tiempo de ejecución. Podemos acceder a clases, interfaces, métodos o atributos sin conocer su nombre o el tipo de un objeto. De esta manera podremos instanciar clases y llamar a los métodos en tiempo de ejecución. A pesar de todas estas ventajas la reflexión puede generar problemas de seguridad o rendimiento en nuestras aplicaciones. Al poder acceder a todos los atributos y…

Continuar

HTML5 y CSS3, el futuro de la web

¿Qué es HTML5? HTML5 es un conjunto de estándares para el diseño y desarrollo web, incluye desde la especificación del nuevo lenguaje HTML, pasando por el desarrollo de la nueva versión de CSS, hasta la creación de nuevos APIs para el desarrollo de nuevas funcionalidades. Comencemos con un poco de historia: En el año 1999 W3C publica la especificación de HTML 4.0.1. Entre el año 2000 y 2001 se publican las especificaciones de XHTML 1.0 y 1.1. Al año siguiente, 2002, se comienza el trabajo de desarrollo de XHTML 2.0 que pretendía dar un nuevo enfoque al desarrollo Web. Es un lenguaje basado completamente en XML. Pero este nuevo estándar no era…

Continuar

Razón para llamar a .isEmpty en Collections

Yo siempre he visto este código:

Ésto es lo primero que viene a la cabeza de muchos programadores cuando piensan en “no vacía”. Sin embargo, existe un método que es más apropiado en la mayoría de los casos: isEmpty().

Las principales razones, aparte del tamaño, son: Es más expresivo (el código es más fácil de leer y de mantener). Es más rápido, en algunos casos de varios ordenes de magnitud. Dos ejemplos en los que esto es muy visible son las clases ConcurrentLinkedQueue y NavigableMap / NavigableSet.Todas estas clases implementan el método “size” iterando a través de la colección y debido a esto, la llamada al…

Continuar

Manipulando Ficheros en Java 7 (II)

Crear un Fichero Crear un fichero es algo muy sencillo, lo único que tenemos que hacer es llamar al método create.

Borrar un Fichero o Directorio. Se pueden borrar ficheros, directorios o links. Con los links simbólicos, se borra el link y se mantiene el fichero linkado. Si lo que borramos es un directorio, éste debe estar vacío, sino se producirá un error. Tenemos dos métodos para borrar:

Continuar

Manipulando Ficheros en Java 7 (I)

Una de las mejoras que incluye la última versión de Java tiene que ver con el manejo de ficheros. Anteriormente se utilizaba la clase java.io.File para el manejo de archivos, la nueva versión de la JDK nos permite utilizar la clase java.nio.file.Path para manipular las rutas fichero en cualquier sistema de ficheros. Para poder utilizarla en varias implementaciones del sistema de ficheros, esta nueva API se basa en fábricas. De esta manera no nos tenemos que preocupar por la implementación real.En versiones inferiores a la JDK7 un fichero se podía crear así:

Continuar