Olá a todos.
estou começando a utilizar reflexão, mas encontrei um problema:
tenho o método:
public int[] jogar(int[][] tabuleiro) {
return new int[]{1, 2};
}
ae usando a reflexão para essa classe faço assim:
...
Class classe = classLoader.loadClass("Jogador");
jog = classe.newInstance();
int[][] matrix = new int[3][3];
Method jogar = classe.getMethod("jogar", matrix.getClass()); //Erro nessa linha
int[] a = (int[]) jogar.invoke(jog, matrix);
como o parametro é um int[][], que Class eu tenho que colocar no lugar de matrix.getClass()?
Ou vou ter que usar o tipo Object?
Obrigado.
Class classe = classLoader.loadClass("Jogador");
jog = classe.newInstance();
int[][] matrix = new int[3][3];
Method jogar = classe.getMethod("jogar", matrix.getClass()); //Erro nessa linha
int[] a = (int[]) jogar.invoke(jog, matrix);
Que erro que dá? (Dica - eu aconselharia usar
Method jogar = classe.getMethod(“jogar”, new Class<?>[]{matrix.getClass()});
por via das dúvidas.
na verdade o erro tá dando na linha de baixo, mas acho que o problema está na linha indicada.
O erro é:
SEVERE: null
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
Ora, ora, ora, você teria de fazer:
Class classe = classLoader.loadClass("Jogador");
jog = classe.newInstance();
int[][] matrix = new int[3][3];
Method jogar = classe.getMethod("jogar", matrix.getClass()); //Erro nessa linha
int[] a = (int[]) jogar.invoke(jog, new Object[]{matrix});
Isso é porque o compilador se confundiu um pouco e se você fizer isso que eu lhe indiquei ele não se confunde mais.