reflect - Llamada de función dinámica de Java
reflection java stack overflow (2)
Tengo una matriz de cadenas que contiene nombres de métodos en la clase yyyyyy
En la clase xxxxxx
estoy haciendo una instancia de yyyyyy
(digamos obj
). Ahora puedo llamar a obj.function_name()
, excepto que quiero leer function_name
de String Array en un bucle. es posible?
Es posible usar la reflexión, aunque probablemente debería cuestionar un poco su diseño si necesita ese tipo de comportamiento. Class.getMethod
toma una String
para el nombre del método y devuelve un objeto Method
, que luego puede invocar .invoke
on para llamar al método
Estas páginas de Javadoc deberían ser útiles:
Código de muestra (suponiendo que los métodos de yyyyyy
toman un argumento int
, solo para mostrar el paso del argumento):
yyyyyy obj = new yyyyyy();
String[] methodNames = {"foo", "bar", "baz"};
for(String methodName : methodNames) {
Method method = Class.forName("yyyyyy").getMethod(methodName, new Class[] {int.class});
method.invoke(obj, 4); // 4 is the argument to pass to the method
}
Puedes, usando la reflection . Se hace llamando a Yyyy.class.getMethod("methodName").invoke(someArgs)
Tendría que manejar una serie de excepciones, y su método debe ser public
. Tenga en cuenta que las convenciones de codificación Java prefieren methodName
a method_name
.
Sin embargo, usar la reflexión debería ser el último recurso. Deberías estar usando más técnicas orientadas a objetos.
Si constantemente necesita funciones similares, tal vez pueda ver un lenguaje dinámico que se ejecuta en la plataforma Java, como groovy