Eu preciso, em um framework que estou fazendo, ler o nome de um método e sua lista de parâmetros de um arquivo, para poder invoca-lo.
Estou com problemas pois não sei como criar uma instância de Class que representa um array de um tipo objetos para localizar o método que o utiliza como parâmetro.
Eu achei muita coisa falando sobre como criar arrays utilizando reflexão, mas como eu crio uma instância de Class representando um array de um determinado tipo?
Infelizmente não, pois esse link (e todos os outros que encontrei) falam sobre como manipular e criar um array, mas não como obter a sua classe.
Obrigado a todos! Mas se alguém tiver mais alguma idéia, será bem vinda!!!
sergiotaborda
Guerr@:
Olá Pessoal!
Eu preciso, em um framework que estou fazendo, ler o nome de um método e sua lista de parâmetros de um arquivo, para poder invoca-lo.
Estou com problemas pois não sei como criar uma instância de Class que representa um array de um tipo objetos para localizar o método que o utiliza como parâmetro.
Eu achei muita coisa falando sobre como criar arrays utilizando reflexão, mas como eu crio uma instância de Class representando um array de um determinado tipo?
Você não cria. Por exemplo o java.lang.reflect.Array.newInstance(Class<?> componentType, int… dimensions)
cria um array do tipo componentType e retorna um objecto (que é uma array). Só que a classe desse objecto não tem nenhuma informação de componentType.
É que eu não estou querendo criar um array, mas estou querendo o objeto Class que o representa para poder comparar com os argumentos de um método que recebe um array como parâmetro. Exemplo:
String.class; // Obtém a classeClass.forName("java.lang.String"); //Obtém a classeString[].class//ObtémaclassedoarrayClass.forName("java.lang.String[]"); // Dá pau!!!Class.forName("[Ljava.lang.String"); // Dá pau!!!
Eu queria obter o mesmo resultado de String[].class mas sem conhecer a classe em tempo de compilação, ou seja, através de uma String…
Guerr
Olá Sergio!
Minha situação é a seguinte: eu leio de um arquivo de configurações o método e os tipos de seus parâmetros, para eu dar um “getMethod()” na classe. O problema é que se o tipo for um array eu não sei como criar uma instância de Class para representa-lo.
É um problema bem específico… Entenderam melhor?
[]s
acopiara
importjava.lang.reflect.Array;importjava.lang.reflect.Method;publicclassTesteMain{publicstaticvoidmain(String[]args){TesteMaintesteMain=newTesteMain();testeMain.teste();}publicvoidteste(){try{Class<?>stringArrayClass=Array.newInstance(String.class,0).getClass();Methodmethod=getClass().getMethod("metodoInvocado",stringArrayClass);Objectargs=Array.newInstance(String.class,10);Array.set(args,1,"Isto é um teste");method.invoke(this,args);}catch(Exceptione){e.printStackTrace();}}publicvoidmetodoInvocado(String[]teste){System.out.println(teste[1]);}}
Dessa forma você consegue invocar um metódo que tem um array como parametro.
Espero ter ajudado.
Valeu,
--
Alysson Bandeira
Guerr
acopiara:
importjava.lang.reflect.Array;importjava.lang.reflect.Method;publicclassTesteMain{publicstaticvoidmain(String[]args){TesteMaintesteMain=newTesteMain();testeMain.teste();}publicvoidteste(){try{Class<?>stringArrayClass=Array.newInstance(String.class,0).getClass();Methodmethod=getClass().getMethod("metodoInvocado",stringArrayClass);Objectargs=Array.newInstance(String.class,10);Array.set(args,1,"Isto é um teste");method.invoke(this,args);}catch(Exceptione){e.printStackTrace();}}publicvoidmetodoInvocado(String[]teste){System.out.println(teste[1]);}}
Dessa forma você consegue invocar um metódo que tem um array como parametro.
Espero ter ajudado.
Valeu,
--
Alysson Bandeira
Valeu Alysson!!! Foi uma solução bem criativa e funcionou para o que eu precisava!!!
Julianoused
Alysson tu podia descrever o que cada uma das strings significa, bem como seu comandos…
ex.
public class TesteMain { //declara uma nova classe. :shock: