Executar uma classe a partir de um Arry

9 respostas
P

Há como eu executar uma classe a partir de um Arry, por exemplo tenho uma classe chamada Cadastro.class e quero chama-la a partir de uma classe principal, normalmente se faria assim:

1 - “new Cadastro().show();”

Mas dicamos que tenha uma váriavel que possui o nome dessa classe,:

2 - "Object obj = “Cadastro”; "

Como poderia dar um show da mesma forma que o primeiro, mas usando uma variavel?

É que vou precisar acrescentar esses objetos dinamicamente no meu sistema.

Obrigado.

9 Respostas

I

Se seu objeto é um JFrame faça assim…

((JFrame) nome_variavel[posicao]).show();

Tente assim…

falow

Bani

Pelo o que eu entendi o que você tem é apenas o nome da classe como String, não o objeto da classe. Se for assim, acredito que essa idéia de aplicar o método diretamente não vai funcionar.

Precisaria instanciar o objeto através de reflection.

Exemplo:

([color=“red”]Class.forName(array[p]).newInstance()[/color]).show();

P

Valeu Isaac, mas como eu quero não funciona.

Pois como expliquei o meu objeto vai receber apenas o “nome da classe” e não o objeto dela.

Tipo:

Object obj = “Cadastro”; -> Me refiro desta maneira, onde possuo apenas o nome da classe onde a variaveil poderia ser do tipo String.

Para usar “((JFrame)obj).show()” o objeto teria que ser atribuito dessa maneira:

Object obj = new Cadastro();

[]'s

I

Sim…sim…

eu não havia percebido que você queria usar um valor String…

t+

P

É disso mesmo que estou precisando Bani.

Vou utiliza-lo hoje a tarde.

Obrigado.

dukejeffrie

lembra de olhar o javadoc.

O pacote que vc quer é o java.lang.reflection, e vc não vai poder chamar o metodo show direto.

vc tem que pegar a variavel e depois refletir o metodo tambem:

Class cadastroClass = Class.forName("Cadastro");
Object obj = cadastroClass.newInstance();
Method showMethod = cadastroClass.getMethod("show", null);
showMethod.invoke(obj, null);

Fica bem mais chato de usar quando vc precisa passar parâmetros.

Bani

O dukejeffrie tem razão, provavelmente você não vai conseguir compilar com aquele código que eu passei antes porque o newInstance retorna um Object, que não tem o método show.

Mas se todas as suas classes forem subclasses de uma única superclasse que tenha esse método show(), ou então implementarem uma interface com esse método, fica um pouco mais fácil você fazer o casting do objeto e aí utilizar tudo pela superclasse ou interface. Isso para não ficar precisando usar tanto reflection. Mas aí você que sabe o que você acha mais simples para você fazer.

Exemplo (acho que esse funciona, mas não testei):

(color="red"Class.forName(“nome da classe”).newInstance()[/color]).show()

Ou então você realmente cria o objeto, tudo certinho.

dukejeffrie

Mandou bem!!

Interfaces são excelentes nessa parte. Primeiro porque vc pode ter certeza, em tempo de compilação, de que tá executando os métodos certos. E depois pq c não fica escrevendo tanto.

Se bem que a Bani gosta de codar… :slight_smile:

[]s do duke

P

Realmente daquela maneira não dava para chamar o show direto, por isso utilizei este comando:

((JFrame)Class.forName(“classe”).newInstance()).show() ;

E gostei bastante desse comando, pois deixa o programa muito mais dinamico e prático.

[]'s

Criado 27 de fevereiro de 2003
Ultima resposta 27 de fev. de 2003
Respostas 9
Participantes 4