Sto tentando di scrivere un metodo per eseguire un metodo statico da un'altra classe passando una serie di stringhe come argomenti al metodo.Metodo di richiamo con un parametro dell'array mediante la riflessione
Ecco quello che ho:
public static void
executeStaticCommand(final String[] command, Class<?> provider)
{
Method[] validMethods = provider.getMethods();
String javaCommand = TextFormat.toCamelCase(command[0]);
for (Method method : validMethods) {
if (method.getName().equals(javaCommand)) {
try {
method.invoke(null, new Object[] { new Object[] { command } });
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
Throwable ex = e.getCause();
ex.printStackTrace();
}
break;
}
}
}
tale che questo:
String[] args = new String[] { "methodName", "arg1", "arg2" };
executeStaticCommand(args, ClassName.class);
dovrebbe eseguire:
public class ClassName {
public static void methodName(String[] args) {
assert args[1].equals("arg1");
}
}
Tuttavia mi sto IllegalArgumentException
s.
Stavo solo scrivendo, più un ulteriore miglioramento che può fare. È necessario cambiare il richiamo a 'method.invoke (null, new Object [] {args})' affinché funzioni. – Perception
@Perception ma il parametro del metodo di destinazione è 'String []', non 'String, String'. Non funziona (non ho un editor java a portata di mano qui)? – Bohemian
Non funziona perché l'array viene espanso nei vararg, causando la mancata corrispondenza tra i tipi di firma e argomento. – Perception