Bom dia a todos,
A minha duvida é quais os prejuízos em estanciar as classes em tempo de execução, a intenção é usar isso na montagem do menu do sistema, tenho mais de 50 itens, não quero usar um
switch (item) {
case “”:
}
para cada opção, então pensei em criar um Class.forName(cOpcao).newInstance();
Sei q funciona pq já o fiz, mas não me medi desempenho ou estouro de memoria ou algo do tipo, se alguém já usa ou tem mais conhecimento dos efeitos do Class.forName, se puder me orientar eu agradeço.
Abs,
Não vejo prejuízo em usar reflection nesse seu cenário.
Inclusive é uma forma legal de fazer a inversão de dependência, em algum lugar você mapeia as suas opções com o nome da classe a ser instanciada.
Com esta solução surgiu um problema, depois que eu instancio, preciso pegar um method que esta na classe e esta parte não estou conseguindo fazer… vou colocar um exemplo:
Class classe = Class.forName("teste");
classe.newInstance();
JInternalFrame frm = (JInternalFrame) classe.getMethod("getFrame").invoke(classe);
na minha classe teste.java eu tenho um metodo:
public JInternalFrame getFrame() {
return frm;
}
Como eu faço para pegar o getFrame em classe que eu instanciei ?
Vlw a força
Fazendo assim, funciona !
Object classe = Class.forName(cModulo).newInstance();
JInternalFrame frm = (JInternalFrame) classe.getClass().getDeclaredMethod("getFrame").invoke(classe);
Pra ficar mais legível:
Class classeTeste = Class.forName("teste");
Method metodoGetFrame = classeTeste.getMethod("getFrame");
Object instancia = classeTeste.newInstance();
JInternalFrame frm = (JInternalFrame) metodoGetFrame.invoke(instancia);