1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problemas com Reflection em arrays

Estou usando Reflection para instanciar uma classe e chamar um de seus méetodos. Fiz um pequeno teste, primeiro usando duas Strings como parametro para o metodo. Tudo funcionou perfeitamente.

Quando modifiquei o metodo para receber um arraym onde eu poderia colocar um numero X de String e que surgiu o problema. Envio abaixo um exemplo:

Exemplo que funciona: OBS: Tenho uma classe que se chama ClassJava, que tem apenas um metodo, que recebe duas String e as imprime:

     public static void metodo1(String s1, String s2) {
        System.out.println(s1 + " " + s2);
     }

Tenho uma outra classe, chamada "Caller", que atua com reflection, para chamar a ClassJava e acessar seu metodo1:

        try {
            Object fooInstance;
            Method barMethod;

            Class<?> classFoo = Class.forName("teste.ClassJava");

            fooInstance = classFoo.newInstance();
            String[] lista = new String[2];

            barMethod = classFoo.getDeclaredMethod("metodo1", String.class, String.class);
            barMethod.invoke(fooInstance, "teste1", "teste2");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "err - " + e.getMessage());
        }

Até aí, tudo funciona. Agora altero as classes para que, ao inves de ter duas Strings, passem a usar um array de Strings. O problema surge ai, com uma msg de erro indicando que estou usando a quantidade errada de parametros, quando tento rodar a classe Caller:

Metodo da classe ClassJava:

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

A Caller fica assim (gerando o erro: número incorreto de argumentos):

          try {

            Object fooInstance;
            Method barMethod;

            Class<?> classFoo = Class.forName("teste.ClassJava");

            fooInstance = classFoo.newInstance();
            String[] lista = new String[2];

            barMethod = classFoo.getDeclaredMethod("metodo1", lista.getClass());

            lista[0] = "1";
            lista[1] = "2";

            barMethod.invoke(fooInstance, lista);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "err - " + e.getMessage());
        }
  • Como faço para identar o codigo? a visualizacao ficou horrivel

    gpmdf2   27 de mai de 2015
  • Utilize três crases antes e depois do código.

    well.nunes   27 de mai de 2015
  • Tentei fazer isso, pois li na coluna que fica à esquerda. Só que nao consegui. ao tentar enviar as alteracoes, recebo um erro, como se eu tivesse alterado a tag. Mas nem sequer mexi nela. Criei outro topico, pois esse está ilegivel.

    gpmdf2   27 de mai de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.