Android / Java: ¿Llamar a un método usando reflexión?

Tengo un método estático titulado chooseDialog (String s, int i) en el que quiero llamar a otro método dentro de la misma clase (Dialogs.class) basado en los parámetros proporcionados a chooseDialog. S es el nombre del método deseado y i es su único parámetro.

He probado numerosos tutoriales y he pasado unas horas leyendo sobre el tema, pero no puedo conseguir una comprensión firme de lo que exactamente tengo que hacer.

¿Algunas ideas?

¡Gracias!

¿Por qué desea llamar a un método con nombre pasado en un parámetro String? ¿No puede crear una constante para diferentes acciones, a continuación, utilice el switch y en cada caso, llame al método con el parámetro i ?

Tendrá la ventaja de que el compilador compruebe su código para detectar errores.

Edit : si realmente quieres usar la reflexión, recupera un objeto Method con:

 Method m = YourClass.class.getMethod("method_name",new Class[] { Integer.class }) 

Supongo que Integer.class podría funcionar. A continuación, invocar el método como

 m.invoke(null,123); //first argument is the object to invoke on, ignored if static method 
 Method method = Dialogs.getMethod(s, Integer.class); method.invoke(null, i); 

Si sólo desea llamar a otro método estático en la clase, puede utilizar el enfoque ya identificado por otros:

 Method method = Dialogs.getMethod(s, Integer.class); method.invoke(null, i); 

Pero si desea poder utilizar un método estático para llamar a un método no estático, deberá pasar el objeto al que desea hacer referencia o hacer que chooseDialog no sea estático.

 function chooseDialog(Object o, String s, Integer i) { Method method = Dialogs.getMethod(o, Integer.class); method.invoke(o, i); } 

Pero no creo que esta sea la manera OOP correcta para manejar el problema. Y sobre la base de sus comentarios, la reflexión no es absolutamente necesario, y han chooseDialog analizar la cadena y pasar que para el método apropiado es un enfoque mucho más typesafe. En cualquiera de los dos enfoques, las pruebas de unidad deben ser iguales.

  if (s.equals("dialog1")) { dialog1(i); } 
  • ¿Cómo utilizar la reflexión para cambiar el servicio de copia de seguridad?
  • Error al usar StatusBarManagerService - java.lang.SecurityException en android.permission.STATUS_BAR_SERVICE
  • Field.getGenericType () devuelve la instancia de java.lang.Class en lugar de Type
  • Cargador de clases personalizado para android?
  • Reflexión de Java que maneja cambios de la biblioteca
  • ¿Es posible cargar dinámicamente una biblioteca en tiempo de ejecución desde una aplicación de Android?
  • Error de método de reflexión de Android
  • Instancia de clase abstracta con constructor oculto
  • BackupAgent compatible con versiones anteriores
  • Invocación de un método privado (no publicado) en la API de Android
  • Clase personalizada que carga / reemplaza las clases nativas de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.