Chiamata di funzioni dinamiche Java

Ho una matrice String che contiene i nomi dei metodi nella class yyyyyy

Nella class xxxxxx sto facendo un’istanza yyyyyy (ad esempio obj ). Ora posso chiamare obj.function_name() , tranne che voglio leggere function_name dall’array String in un ciclo. È ansible?

Puoi, usando la riflessione . È fatto chiamando Yyyy.class.getMethod("methodName").invoke(someArgs)

Dovresti gestire un sacco di eccezioni e il tuo metodo deve essere public . Si noti che le convenzioni di codifica java preferiscono methodName a method_name .

L’uso della riflessione, tuttavia, dovrebbe essere l’ultima risorsa. Dovresti usare più tecniche orientate agli oggetti.

Se hai costantemente bisogno di funzionalità simili, forse puoi guardare un linguaggio dinamico in esecuzione sulla piattaforma java, come groovy

È ansible utilizzare il reflection, anche se probabilmente dovresti mettere in discussione il tuo design in qualche modo se hai bisogno di quel tipo di comportamento. Class.getMethod prende una String per il nome del metodo e restituisce un object Method , che può quindi chiamare .invoke per chiamare il metodo

Queste pagine Javadoc dovrebbero essere utili:

  • Class.getMethod
  • Method.invoke

Esempio di codice (assumendo che i metodi yyyyyy prendono un argomento int , solo per mostrare l’argomento che passa):

 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 }