Java: Invocar un metodo y obtener SIEMPRE un Object como retorno

By | 09/24/2009

Necesitaba llamar a un método pero obteniendo como retorno siempre un Object. Esto para poder evaluar getMetodo() == null, sin importar si en realidad el método devolvía un primitivo.
Si el método devuelve un primitivo (ej. un int, un boolean, etc), la sentencia getMetodo() == null no compila.
El problema surgía porque las clases eran generadas dinámicamente desde una plantilla xml, y no podía conocer si el valor devuelto sería un Object o un primitivo hasta después de recibir el xml y generar las clases dinámicamente.
Al final la solución era bastante sencilla…
—-

import java.beans.Expression;

public class TestReturnToObject {

    /* Invocar un metodo y obtener SIEMPRE un Objeto como resultado. */

    public static void main(String[] args) throws Exception {
        TestReturnToObject t = new TestReturnToObject();
        t.test();
    }

    public void test() throws Exception {

        BeanTest bean = new BeanTest();
        // Ejecuto el metodo "getValue"
        Expression expr = new Expression(bean, "getValue", new Object[0]);
        expr.execute();

        Object o = expr.getValue(); // Siempre obtengo un Object
        if (o == null) {
            System.out.println("valor nulo");
        } else {
            System.out.println(o.getClass().getName() + " : " + o.toString());
            // java.lang.Integer : 1
        }
    }

    public class BeanTest {

        // Esta es la clase que en realidad se genera dinamicamente
        // El metodo, en esta oportunidad devuelve un primitivo.
        public int getValue() {
            return 1;
        }

        // El mismo metodo puede generarse tambien como un Object
        // segun como venga la plantilla. Algo que no puedo saber de antemano
        //
        // public String getValue() {
        // return new String("hola");
        // }
    }

}


¿Te fue útil?

Compartir esto:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *