Lo que me gusta, me interesa y me motiva…
RSS icon Home icon
  • Java: Invocar un metodo y obtener SIEMPRE un Object como retorno

    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?

    Entradas relacionadas

    Leave a reply