Reflection

4 respostas
C

Pessoal tenho uma dúvida em reflection: tenho 2 frames como abaixo

public class formChoiceAcessorie extends JFrame {

public formChoiceAcessorie(DynamicScreenData jpanel, String FieldName) {

}

}
public class formChoiceGaiola extends JFrame {

public formChoiceGaiola(DynamicScreenData jpanel, String FieldName) {

}

}

em outra classe eu tenho uma String que recebo em argumento por exemplo:

public void execute (String classe) {

// onde classe vem com ‘formChoiceAcessorie’

}

como faço para chamar o Frame com reflection ??

grato.

como faço

4 Respostas

A

Class.forName(classe).newInstance();

Atencao: O nome da classe é o caminho completo. Ex. br.com.guj.SuaClasse

Alberto

C

Não expliquei direito fora o chamada como eu passo os parametros para o metodo construtor.

_fs

Aí a coisa complica bastante. Deve fazer o seguinte:

//nome de classe deve começar com letra maiúscula
Class klass = Class.forName( "meu.pacote.FormChoiceAcessorie" ); // 1
Constructor constuctor = klass.getConstructor( new Class[] { DynamicScreenData.class, String.class } ); // 2
JFrame frame = ( JFrame ) constructor.invoke( new Object[] { parametro1, parametro2 } ); // 3

Explicando:

  1. Como o colega ensinou
  2. Ganha referência a um objeto do tipo Constructor da classe indicada que recebe 2 parâmetros dos tipos passados como argumento no getConstructor(). No seu caso o construtor que você mostrou no trecho de código.
  3. Invoca o construtor passando os parâmetros. O cast para JFrame ocorre porque pelo que vi é a única classe em comum a seus formulários.

Usando Java 5 evita o cast:

Constructor< JFrame > constuctor = klass.getConstructor( new Class[] { DynamicScreenData.class, String.class } );
JFrame frame = constructor.invoke( new Object[] { parametro1, parametro2 } );
C

Muito Obrigado funcionou perfeitamente.

só tive que mudar de invoke para newInstance.

no invoke estava dando erro de compilacao.
The method invoke(Object[]) is undefined for the type Constructor

Criado 7 de junho de 2006
Ultima resposta 19 de jun. de 2006
Respostas 4
Participantes 3