Salve !! To tentando fazer uma coisa meio fora do comum, não sei se tem como.
Eu quero instanciar uma classe mas não sei sei nome.
Isso mesmo!
Imagine que eu tenho 50 classes ( só imagine, eu não tenho 50 classes …), tudo no mesmo diretório da classe Principal. Aí, eu faço umas comparações, uns acessos ao bd e em tererminado momento eu preciso instanciar uma classe, cujo nome está gravado no bd.
Tem como fazer isso?
algo do tipo
variavelvariavel=newvariavel();
onde variavel pode ser
DesligaTudoLigaTudoContagemRegressivaTimer
Tem como fazer isso?
Obs: a idéia é o seguinte: uma empresa vende um produto e fornece extensões separadamente, cobrando ou não por isso. Não é viável reinstalar todo o sistema na casa do cliente. O método que encontrei de usar essas extensões é esse que eu citei, se for possível.
Class<?> queroInstanciar = Class.forName("br.com.meusite.meupacote.MinhaClasse");
Constructor<?> ctor = queroInstanciar.getConstructor();
Object x = ctor.newInstance();
Se essas classes que você quer instanciar são todas subclasses de uma mesma classe ou se todas implementam a mesma interface, você pode fazer isso:
Class<? extends MinhaSuperclasse> queroInstanciar =
Class.forName("br.com.meusite.meupacote.MinhaClasse").asSubclass(MinhaSuperclasse.class);
Constructor<? extends MinhaSuperclasse> ctor = queroInstanciar.getConstructor();
MinhaSuperclasse x = ctor.newInstance();
E bem vindo ao reflection!
EDIT: Arrumei o código… Desculpe aí.
S
shamanpyro
obrigado!
eu importei o pacote java.lang.reflect.*, e diminui os erros.
Ele tá acusando que eu não posso usar um método não estático de um contexto estático. To tentando arrumar isso, obrigado pela ajuda ^^
try{Class<?>queroInstanciar=Class.forName("net.bonetechnology.Casa");Constructor<?>ctor=Class.class.getConstructor();Objectx=ctor.newInstance();}catch(Exceptione){System.out.println("o cliente não tem o arquivo");}
mas cai sempre no exception… tem idéia do que eu to fazendo de errado?
victorwss
shamanpyro:
eu fiz rodar, da seguitne forma:
try{Class<?>queroInstanciar=Class.forName("net.bonetechnology.Casa");Constructor<?>ctor=Class.class.getConstructor();Objectx=ctor.newInstance();}catch(Exceptione){System.out.println("o cliente não tem o arquivo");}
mas cai sempre no exception… tem idéia do que eu to fazendo de errado?
Qual exceção que dá?
S
shamanpyro
“o cliente não tem arquivo” =P
victorwss
Ao invés de }catch(Exception e){System.out.println("o cliente não tem o arquivo");} coloca isso:}catch(Exception e){e.printStackTrace();}E agora, o que acontece?