Instanciar uma classe através do seu nome

3 respostas
M

tenho o nome de uma classe, em uma String, e gostaria de gerar uma instancia da classe cujo nome eu tenho nessa string.
imagino q isso resolveria o problema:
Class.forName(“nome da classe”).newInstance();
certo?
mas e se a classe q eu for instanciar possuir um construtor q recebe alguns parametros, daí eu passar esses parametros ao seu construtor. como faço?

3 Respostas

C

mmpaulo,

Class.forName(“nome da classe”).newInstance(String, int, char);

public NomeDaClasse(String a, int b, char c) {…} // Construtor da classe

[]'s

M
assim nao funcionaria, pois o método newInstance() da classe Class nao aceita argumentos.

mas eu consegui resolver, assim:

primeiro, tenho q obter o objeto Class q representa a classe cujo nome eu tenho na String, assim:

Class classe = Class.forName(NomeDaClasse);

agora eu obtenho o construtor da classe, usando o método getConstructors(), q devolve um array de objetos Construtor, sendo q cada Constructor representa um construtor da classe. nao sei qual o criterio usado para ordenar os construtores dentro do vetor, mas como no meu caso a classe  tem 1 construtor, eu sei q ele  na posição 0 do vetor:

Constructor c = classe.getConstructors()[0];

a classe constructor tem um metodo newInstance(), q cria uma nova instancia da classe que define este construtor.  q esse newInstance() recebe um vetor de Objects, que serão passados como parametros para o construtor.

ex:

public class ClasseA {

public ClasseA(String s, int i) {

System.out.println("—");

System.out.println(Classe ClasseA sendo instanciada);

System.out.println(s = " + s);

System.out.println(“i = " + i);

System.out.println(”—”);

}

}
public void metodoQualquer() {

Object[] args = new Object[2];

args[0] = Teste teste teste;

args[1] = new Integer(12345);

ClasseA classeA = Class.forName(ClasseA).getConstructors()[0].newInstance(args);

}

valeu ae, cara

C

Era mais ou menos isso… :lol:

Criado 2 de outubro de 2004
Ultima resposta 2 de out. de 2004
Respostas 3
Participantes 2