Deseo invocar el método main
que es estático. Obtuve el objeto del tipo Class
, pero no puedo crear una instancia de esa clase y tampoco puedo invocar el método static
main
.Invocación de un método estático utilizando la reflexión
Respuesta
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");
En caso de que el método es el uso privado getDeclaredMethod()
en lugar de getMethod()
. Y llame al setAccessible(true)
en el objeto de método.
String methodName= "...";
String[] args = {};
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
// for static methods we can use null as instance of class
m.invoke(null, new Object[] {args});
break;
}
}
¿Por qué no utilizar getMethod con el nombre correcto en lugar de recorrer todos los métodos? – mjaggard
A veces es mucho más fácil hacer bucles y encontrar el método por nombre que usar getMethod porque getMethod (u getDeclaredMethod) requiere que resuelvas los tipos de parámetros con gran detalle. Simplemente depende de si la microeficiencia es importante: la iteración de Java es muy rápida, así que a menos que llame al método millones de veces en algún ciclo interno, la iteración será lo suficientemente rápida –
También en una situación más real probablemente solo encuentre el método una vez, incluso si va a utilizar la reflexión para invocarlo varias veces. Por lo tanto, extra sobrecarga al encontrarlo es inmaterial. – RenniePet
fromthe Javadoc de Method.invoke():
Si el método subyacente es estático, entonces el argumento obj especificado se ignora. Puede ser nulo.
¿Qué pasa cuando
Class klass = ...; Method m = klass.getDeclaredMethod(methodName, paramtypes); m.invoke(null, args)
- 1. ¿Cómo puedo simplificar la invocación del método de extensión Linq utilizando la reflexión?
- 2. ¿Cómo puedo verificar si un método es estático utilizando la reflexión?
- 3. La invocación de un método que utiliza la reflexión sobre un objeto único
- 4. invocación de método "dinámico" con el nuevo Scala API reflexión
- 5. Llamar a un método estático utilizando un tipo
- 6. ¿Cómo crear objetos utilizando un método de fábrica estático?
- 7. La invocación de un método de una clase genérica
- 8. Invocación de un método en un objeto
- 9. ¿Cómo ejecutar un método estático privado con parámetros opcionales a través de la reflexión?
- 10. Obtener métodos de clase utilizando la reflexión
- 11. En Java, ¿cómo usar la reflexión para obtener un método estático y ejecutarlo?
- 12. Anular un método estático
- 13. Reflexión sobre un método estático sobrecargado usando un parámetro de salida
- 14. Bloquear() en un método estático
- 15. @synchronized en un método estático
- 16. Android/Java: ¿Llamar a un método usando la reflexión?
- 17. Método de invocación por MethodInfo
- 18. Crear delegado genérico utilizando la reflexión
- 19. Método de invocación como cierre
- 20. ¿Para qué sirve la invocación de un método virtual Java?
- 21. ¿Cómo invocar un método que arroja una excepción utilizando la reflexión de Java?
- 22. ¿Cómo llamo a un método de Objeto Scala utilizando la reflexión?
- 23. Cómo configurar un controlador de eventos dinámicamente utilizando la reflexión
- 24. Método de reflexión GetMethod no devuelve el método estático de una clase en un iphone, pero sí en el simulador
- 25. ¿Cómo se pasan los parámetros por ref cuando se llama a un método estático mediante la reflexión?
- 26. Descubriendo tipos derivados utilizando la reflexión
- 27. Obtiene el tipo utilizando la reflexión
- 28. problemas para invocar el método estático mediante la reflexión y C#
- 29. utilizando la reflexión para encontrar desaprobación
- 30. ¿Cómo invoco un método estático privado usando reflection (Java)?
nos muestran el código, por favor. –