2009-11-18 13 views
5

Para una aplicación realmente abstracta que estoy creando, necesito llamar a los métodos sin conocer sus tipos de parámetros y solo conocer los parámetros en una forma de cadena.getClass(). GetMethod ("nombre", desconocido)

Digamos que tengo el método;

getNames(String like, int amount); 

y tengo una serie de cadenas que contienen los 2 parámetros, así que digamos que tengo;

String[] params = new String[] {"jack", "25"}; 

¿Hay alguna manera de que pueda obtener e invocar este método utilizando la matriz params?

Respuesta

2

Usted podría intentar


String[] params = new String[] {"jack", "25"}; 
Object[] realParams = new Object[params.length]; 
Method[] methods = getClass().getMethods(); 
for (Method method : methods) { 
    if (method.getParameterTypes().length == params.length) { 
    for (int i = 0; i < method.getParameterTypes().length; i ++) { 
     Class<?> paramClass = method.getParameterTypes()[i]; 
     if (paramClass = String.class) { 
      realParams.add(param); 
     } else if (paramClass == Integer.class || paramClass == Integer.TYPE) { 
      realParams.add(Integer.parseInt(param)); 
     } else if (other primitive wrappers) { 
      ... 
     } else { 
      realParams.add(null); // can't create a random object based on just string 
      // you can have some object factory here, or use ObjectInputStream 
     } 
    } 
    break; // you can continue here if the parameters weren't converted successfully,  
    //to attempt another method with the same arguments count. 
    } 
} 
+0

¿Cómo puedo convertir las cadenas al parámetro requerido cuando conozco el método, puede dar un ejemplo? – Thys

+0

Con esa solución no puede tener dos métodos con la misma cantidad de argumentos. Es imposible hacerlo de esta manera a menos que le hayan indicado el nombre del método para ejecutar o los tipos de parámetros que desea usar. –

+0

Revisa mi actualización – Bozho

1

Me gusta la metaprogramación. Es posible que desee examinar Groovy/Scala si está configurado en la plataforma JVM.

0

Mire las API de reflexión de Java, deberían (aunque no lo recuerdo con certeza) poder darle la información que necesita para determinar los diferentes tipos de parámetros. Tendría que iterar sobre la lista e inteligentemente lanzar cada uno según lo que la API de reflexión le haya dicho sobre el método.

0

Para la programación dinámicos utilizan un lenguaje de programación dinámico. Java no es muy adecuado para ese tipo de cosas.

Eche un vistazo a la API de reflexión de todos modos, pero si planea hacer una gran cantidad de programación como la de su aplicación, considere otras alternativas.

Cuestiones relacionadas