style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

blog de Cid

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:

public static void main(String[] args) {
       
        List<Integer> lista = Arrays.asList(7,9,1);
        lista.add(3);
        System.out.println(lista);
}

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 add o alguna otra que intente modificar el tamaño y devuelve UnsupportedOperationException.

public static void main(String[] args) {
       
        List<Integer> lista = new ArrayList() {{ add(7); add(9); add(1)}};
        lista.add(3);
        System.out.println(lista);
        System.out.println(lista.getClass());
}

Comunidad JEspañol para hispanoparlantes

Recientemente me entere de una comunidad que esta dedicada a los hispanoparlantes dedicada a difundir contenidos sobre el ecosistema Java, para algunos será de mucha utilidad si lo suyo no es el ingles, claro esta que siempre sera bueno aprender ese idioma aunque no nos guste:

Aparentemente esta comunidad de principio comparte sus contenidos en redes sociales como facebook, youtube y twitter, y en su sitio.

Espermos que más gente se involucre:

http://www.jespanol.org/index.php

https://www.youtube.com/watch?v=ljZWY4akQeI

Java Champion y Oracle ACE

Automatizar generación de XML con JAXB

Hace poco en mi trabajo tenía que realizar ciertos artefactos que se empaquetan en un archivo jar, el cual incluye un XML, despues de hacer los primeros 2 o 3 note que estaba cayendo en la mala practica de copiar y pegar la estructura del XML de mi viejo artefacto y en ocasiones por rapidez no cambiaba el nombre, tipo de dato o argumento de alguna etiqueta y cuando desplegaba el artefacto pues fallaba, un compañero de trabajo me mencionó que definiera el xsd del archivo, y luego creará los objetos mapeados con xjc (imagino que significa xml java compiler, no estoy muy seguro de ello), y despues diseñara un standalone que preguntara por los valores de los atributos que variaran, y pues seguí las indicaciones realizando los siguientes pasos:

1.- Identifique los elementos que varian que fueron:

Valor del tag autor, email, creationDate, description e implementation.
Valor de los atributos type y length del tag Attribute.
Valor del atributo name del tag Plugin.

<--Ejemplo de un XML de mi artefacto>
<Plugin name="MyPlugin" type="Authentication">
        <autor>Unknown<autor>
        <email>someone@domain</email>
        <creationDate>2015-09-03</creationDate>

The magic number 0xCAFEBABE

Hace poco me entere de la existencia de un número mágico que sirve para identificar archivos o protocolos, para el caso de Java sirve para identificar los formatos de los archivos .class, dicho número se puede observar al abrir el archivo .class con un editor hexadecimal y se podra observar algo asi:

Se dice que el propio James Gosling explico el origen de este número mágico:

Humor negro

Un poco fuerte pero tomenlo con humor.

Argumentos Variadicos (Varargs)

Desde Java 5 se incorporo la posibilidad de tener argumentos variádicos (varargs) en métodos y constructores, dichos argumentos permiten al desarrollador ahorrarse la sobrecarga de métodos o constructores que contienen de 0 a N argumentos del mismo tipo.

Antes de Java 5, había de dos sopas, se tenía que sobrecargar el método, con la límitante para el desarrollador de saber la cantidad máxima y mínima del número de argumentos:

public class VarargsExample {

        public static void main(String[] args) {

                Greeting greet = new Greeting();
                greet.greetings("Hugo", "Paco", "Luis");
                greet.greetings("Hugo", "Paco");
                greet.greetings("Hugo");

        }

}

class Greeting {

        public void greetings(String name1) {
                System.out.println("Hi " + name1);
        }

        public void greetings(String name1, String name2) {
                System.out.println("Hi " + name1 + ", " + name2);
        }

        public void greetings(String name1, String name2, String name3) {
                System.out.println("Hi " + name1 + ", " + name2 + ", " + name3);
        }
}

Y la segunda sopa sería tener definidos los elementos dentro de un arreglo:

public class VarargsExample {

Inicializadores (Inicializadores de Instancia)

Continuando con el post anterior sobre bloques estáticos, pero ahora toca definir los usos, ventajas y desventajas de los inicializadores tambíen conocidos como "inicializadores de instancia", como se puede deducir estos bloques están dedicados para colocar bloques de código para inicializar variables que pertenezcan a la instancia.

Los inicializadores de instancia son bloques de código que pertenecen a la instancia, y se declaran dentro de la clase entre llaves como a continuación se muestra en el siguiente código:

package com.ejemplos.inicializadores;

public class Ejemplo1 {

        {
                System.out.println(this.getClass().getSimpleName());
        }

        Ejemplo1() {
                System.out.println("Constructor");
        }

        public static void main(String[] args) {
                new Ejemplo1();
        }

        {              
                System.out.println(this.getClass().getName());
        }

        {
                System.out.println(this.getClass().getSuperclass());
        }

}

Salida:

Ejemplo1
com.ejemplos.inicializadores.Ejemplo1
class java.lang.Object

Constructor

Bloques estáticos

Hace poco tuve una conversación con un amigo acerca del uso de bloques estáticos y pues sabíamos muy poco de ellos, dicha platica nos hizó investigar más sobre el tema, lo cual originó que escribierá sobre usos, ventajas y desventajas de los bloques estáticos:

Primero toca definir que es un bloque estático: también conocido como inicializador estático es aquel bloque de código que pertenece a una clase o interface y se define entre llaves de código precedidas por la palabra reservada static como se presenta el siguiente fragmento de código:

    public class Ejemplo{

         static int numero;        

         static{
             System.out.println("Esto se imprime dentro de un bloque estático o inicializador estático");
             numero = 10;
         }
         
        public static void main(String [] args){
             
        }
    }

¿Qué opinan sobre esta frase de James Gosling?

Se cumple ? Si o no y porque.


Distribuir contenido

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">