Como instanciar uma classe através de uma String?

5 respostas
J

Tenho uma classe Cadastro_Atividades e outra Cadastro_Fornecedores, e que fazer o instanciamento dessas classes através de uma String.
Exemplo:

String classe = “Cadastro_Atividades”;

E através de classe fazer o instanciamento da Classe Cadastro_Atividades, lavando em conta que se o valor da classe fosse “Cadastro_Fornecedores” eu iria instanciar a Classe Cadastro_Fornecedores, sem precisar mudar o código, só alterando o valor da String.

Tem como fazer isso? Como posso fazer?

5 Respostas

J

String classe = "Cadastro_Atividades"; Object obj = Class.forName(classe).newInstance();

J

E como eu faço para acessar os métodos da classe através do obj?

J

Aí é que tá, para ficar legal isso as classes teriam que ter uma superclasse (ou interface) em comum, assim você faria um cast direto para ela sem nem saber o que tem nesse obj...

ex.:

public interface Cadastro{
   public void executar();
}

public class CadastroAtividades implements Cadastro{
   public void executar(){
         System.out.println("Executando cadastro de atividades");
   }
}

public class CadastroFornecedores implements Cadastro{
   public void executar(){
      System.out.println("Executando cadastro de fornecedores");
   }
}
String classe = "CadastroAtividades";

Cadastro cad = (Cadastro) Class.forName(classe).newInstance();
cad.executar();

pra que você quer usar isso?

L

acho que o que o nosso amigo quer é isso REFLECTION

public class Coelho {
    
    public static void main(String[] args){
        try{
            String nmClasse = "TesteCoelho"; 
            String nmMetodo = "imprimeNome";
            Class [] parametros    = new Class[]{String.class};
            Object[] vlParametros  = new Object[]{"Luis Coelho"};
            Object classe          = Class.forName(nmClasse).newInstance();
            Method met             = classe.getClass().getMethod(nmMetodo,parametros);
            met.invoke(classe, vlParametros);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
class TesteCoelho{
    public void imprimeNome(String nome){
        System.out.println("Nome -> " + nome);
    }
}
J

ou valeu a todos, tando como interface e reflection funcionou!Obrigadão!!!

Criado 19 de abril de 2006
Ultima resposta 20 de abr. de 2006
Respostas 5
Participantes 3