2010-03-09 26 views

Respuesta

15

Aquí hay un ejemplo simple de invocación de un método utilizando reflexión que involucra primitivas.

import java.lang.reflect.*; 

public class ReflectionExample { 
    public int test(int i) { 
     return i + 1; 
    } 
    public static void main(String args[]) throws Exception { 
     Method testMethod = ReflectionExample.class.getMethod("test", int.class); 
     int result = (Integer) testMethod.invoke(new ReflectionExample(), 100); 
     System.out.println(result); // 101 
    } 
} 

para ser robusto, que debe capturar y manejar todas las excepciones relacionadas con la reflexión-controladas NoSuchMethodException, IllegalAccessException, InvocationTargetException.

+0

@ polygenelubricants-thanks – Steven

0

Puede usar getClass en cualquier objeto para descubrir su clase. Luego puede usar getMethods para descubrir todos los métodos disponibles. Una vez que tenga el método correcto puede llamar invoke con cualquier número de parámetros

+0

cualquier enlace que muestre el ejemplo – Steven

0

esta es la forma más sencilla que conozco, tiene que estar rodeado de tratar & captura:

Método m = .class.getDeclaredMethod ("", arg_1.class, arg_2.class, ... arg_n.class); resultado =() m.invoke (null, (Object) arg_1, (Object) arg_2 ... (Object) arg_n);

esto es para invocar un método estático, si desea invocar un método no estático, debe reemplazar el primer argumento de m.invoke() de nulo por el objeto desde el que se invoca el método subyacente.

no olvides agregar una importación a java.lang.reflect. *;

+0

¿Qué sucede si estoy usando primitivas? – Steven

+0

@Shuky: ¿por qué enviar los argumentos a Object? –

+0

@Seteven, Carlos Heuberger: el casting no es obligatorio, solo quería decir que no pueden ser primitivos (en lugar de int, uso entero, etc.) –

3

Llamar a un método de clase utilizando la reflexión es muy simple. Necesita crear una clase y generar un método en ella. como sigue.

package reflectionpackage; 

public class My { 
    public My() { 
    } 

    public void myReflectionMethod() { 
     System.out.println("My Reflection Method called"); 
    } 
} 

y llama a este método en otra clase utilizando la reflexión.

package reflectionpackage; 
import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 

public class ReflectionClass { 

    public static void main(String[] args) 
    throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 
     Class c=Class.forName("reflectionpackage.My"); 
     Method m=c.getDeclaredMethod("myReflectionMethod"); 
     Object t = c.newInstance(); 
     Object o= m.invoke(t);  
    } 
} 

Find more details here.

Cuestiones relacionadas