Java trucos y buenas practicas.

Observe el siguiente código:

1 Object instance = new Object();

Esto es equivalente ha:

1 Object instance = new Object();

Ahora teniendo el nombre de la clase:

1 Class c= Class.forName(className);
2 return c.newInstance();

Fuente: http://stackoverflow.com/questions/3170159/difference-between-calling-new-and-getinstance

Fuente: http://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html

Presenter Notes

En java todo objeto heredan de Object

Todas las clases son en realidad subclases de una clase más amplia: la clase Object. Esta clase incluye todos los objetos (los lectores de archivos, las tortuga, los arreglos, los glyphs, etc.). Por lo tanto siempre es posible colocar cualquier objeto en donde se espera un expresión de tipo Object. Por ejemplo:

1 Object o1= "Hola";
2 Object o2= new TextReader("datos.txt");
3 Object o3= new Nodo(3, "hola", null, null);
4 Object o4= new Box( ... );

Recuerde que la relación ser subclase de es transitiva: como Box es subclase de Glyph y Glyph es subclase de Object entonces Box es subclase de Object también y por eso es válido realizar la última operación del ejemplo.

El único problema es que no hay muchas operaciones que se puedan realizar con una variable de tipo Object. Quizas la más importante es que se puede obtener un string que describa el objeto:

1 println(o1.toString());  // despliega "Hola" en pantalla
2 println(o3.toString());  // despliega un mensaje no muy útil

Presenter Notes

Constructor dinamico

 1  public static Object createObject(Constructor constructor,
 2       Object[] arguments) {
 3
 4     System.out.println("Constructor: " + constructor.toString());
 5     Object object = null;
 6
 7     try {
 8       object = constructor.newInstance(arguments);
 9       System.out.println("Object: " + object.toString());
10       return object;
11     } catch (InstantiationException e) {
12       //handle it
13     } catch (IllegalAccessException e) {
14       //handle it
15     } catch (IllegalArgumentException e) {
16       //handle it
17     } catch (InvocationTargetException e) {
18       //handle it
19     }
20     return object;
21   }
22 }

Presenter Notes