.class de vetor [RESOLVIDO]

4 respostas
helders_sa

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.

4 Respostas

T
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.

helders_sa

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)
T

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.

helders_sa

Deu certo.

Muito obrigado.

Criado 28 de julho de 2008
Ultima resposta 29 de jul. de 2008
Respostas 4
Participantes 2