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.
- Android, ¿cómo borrar la lista de tareas recientes que podría obtener desde el botón Inicio en la mayoría de teléfono? ¿La reflexión es una manera posible?
- ¿Cómo se crea una instancia de la actividad de Android (con reflexión)?
- Android: cambiar el campo final estático privado usando la reflexión de java
- Reflexión de Java para el método estático privado con parámetros
- Compruebe si el objeto tiene un método en Java?
¿Algunas ideas?
¡Gracias!
- Reflexión Java: implementa la interfaz y pasa a otra clase
- Android Java objModelClass.getClass (). GetDeclaredFields () devuelve "$ change" como un campo
- Soporte de la clase Robolectric de Android. Cómo tener las referencias de la clase de biblioteca R desde el proyecto de aplicación
- Android getOnTouchListener con la versión del API> = 15
- UnsuppotedOperationException.getCause se devuelve
- Confirmación de mi comprensión del principio de Android Concept (uso de múltiples actividades)
- Acceso a campos desde un objeto proxy
- Android Bluetooth no puede conectarse a dispositivos médicos con puerto fijo # - ¿utilizar reflexión de Java?
¿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); }
- Android – ¿Cómo configurar la imagen de fondo de pantalla?
- Geolocalización de phonegap, código 3 – el tiempo de espera expirado sigue apareciendo en algunos dispositivos Android