Tengo un montón de nombres de métodos estáticos, ¿cómo los ejecuto? Creo que puedo usar la reflexión, pero ¿cómo hacer eso?En Java, ¿cómo usar la reflexión para obtener un método estático y ejecutarlo?
5
A
Respuesta
21
directamente desde el interwebz
Class<?> class1;
try {
class1 = Class.forName(CLASS);
Method method = class1.getMethod(METHOD, String.class);
Object o = method.invoke(null, NAME);
System.out.println(o);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
1
static public Object execute(Class<?> cls, Object instance, String methodname,
Object[] args, Class<?>[] types) throws Exception {
Object result = null;
Method met = cls.getMethod(methodname, types);
if (instance == null && !Modifier.isStatic(met.getModifiers())) {
throw new Exception("Method '" + methodname + "' is not static, so "
+ "instance must be not null");
}
try {
result = met.invoke(instance, args);
}
catch (InvocationTargetException ite) {
throw (Exception) ite.getCause();
}
return result;
}
5
código a ejecutar método estático:
Method method = Utils.class.getMethod("generateCacheFolderName", Integer.class);
System.out.println(method.invoke(null, new Integer(10)));
y clase con métodos estáticos:
public class Utils {
public static String generateCacheFolderName(Integer len) {
Random rand = new Random();
StringBuilder sb = new StringBuilder(len);
for(int i = 0; i<len; ++i)
sb.append(rand.nextInt() % 10);
return sb.toString();
}
public static String otherStaticMethod() {
return null;
}
}
Cuestiones relacionadas
- 1. Reflexión: ¿Cómo obtener un método genérico?
- 2. Invocación de un método estático utilizando la reflexión
- 3. Cómo invocar un método en Java usando la reflexión
- 4. Android/Java: ¿Llamar a un método usando la reflexión?
- 5. ¿Cómo invoco un método estático privado usando reflection (Java)?
- 6. ¿Cómo y dónde usar el modificador estático en Java?
- 7. ¿Cómo obtener el valor de un argumento de método a través de la reflexión en Java?
- 8. Cómo usar la reflexión para crear una "máquina de reflexión"
- 9. Cómo sincronizar el método estático en java
- 10. Obtener acceso desde un método estático
- 11. ¿Cómo puedo simular fácilmente un método estático en Java (jUnit4)
- 12. problemas para invocar el método estático mediante la reflexión y C#
- 13. Usar el módulo sched para ejecutarlo en un momento dado
- 14. ¿Cómo usar la reflexión para simplificar constructores y comparaciones?
- 15. Reflexión del método seguro en Java
- 16. ¿Hay un método estático Java "nulo o igual" estático?
- 17. ¿No se puede usar un método público estático?
- 18. ¿Cómo uso la reflexión para invocar un método con parámetros?
- 19. ¿Cómo puedo verificar si un método es estático utilizando la reflexión?
- 20. ¿Cómo obtener el objeto concreto de un método estático a través de la API reflejada?
- 21. ¿Cómo ejecutar un método estático privado con parámetros opcionales a través de la reflexión?
- 22. diferencia entre sincronizar un método estático y un método no estático
- 23. ¿Cómo paso un método estático para comp en clojure?
- 24. Cómo encontrar un método sobrecargado por reflexión
- 25. Java sin nombre método estático
- 26. ¿Cómo puedo compilar un programa Java en Eclipse sin ejecutarlo?
- 27. Usar la reflexión para llamar a un servicio web ASP.NET
- 28. Con la reflexión de Java cómo instanciar un nuevo objeto, ¿luego invocar un método en él?
- 29. Bloquear() en un método estático
- 30. GetType método estático en
sólo una nota: estática método i no es diferente de un método regular. invocarlos es lo mismo que invocar los métodos regulares a través de la reflexión – ligerdave