Fórum Passar nome da Função como String #524994
06/07/2015
0
Estava pensando em desenvolver um Schedule, que rodasse algumas rotinas automaticamente.
Eu estaria cadastrando as mesmas via banco de dados e o sistema faria a busca e executaria a rotina.
Porem, gostaria de saber se há alguma API ou Biblioteca que eu possa usar para executar uma rotina, passando o nome dela como String. Ex:
String nomeRotina = "OlaMundo()"; executar(nomeRotina);
Precisaria de algo semelhante a isso, pois o nome das rotinas estariam cadastradas no banco, como varchar. Ai só passaria o nome da mesma para que pudessem ser executadas.
Não sei se a ideia ficou clara. rsrsrsrs Mas desde já agradeço a atenção de todos :)
Thiago Moises
Curtir tópico
+ 0Post mais votado
06/07/2015
Ronaldo Lanhellas
Gostei + 1
Mais Posts
06/07/2015
Ronaldo Lanhellas
Gostei + 0
06/07/2015
Ronaldo Lanhellas
Gostei + 0
07/07/2015
Thiago Moises
o que voce quer é da api de reflection do java
da uma olhada no link DOC Reflect invoke pois o que voce precisa é usar o metodo invoke que faz exatamente isso...
da uma olhada e ve se te ajuda qualquer coisa é só falar.
att.
Olá galera, Agradeço a ajuda de vcs :)
Vou pesquisar um pouco sobre as soluções que me passaram, e em breve respondo se solucionou meu problema :)
Mais uma vez..Agradeço a atenção :)
Gostei + 0
07/07/2015
Thiago Moises
Consegui resolver meu problema. Usei a sugestão do Carlos. Meu codigo ficou assim:
//Classe Schedule
public void executa(String rotina) {
try {
//pego a classe passada por string
Class<Rotina> cls = (Class<Rotina>) Class.forName(rotina);
//listo todos os metodos da classe
Method[] methods = cls.getDeclaredMethods();
for (Method m : methods) {
//caso o metodo for o start() executa o mesmo
if (m.getName().equals("start")) {
//invoca o metodo criando uma nova instancia da classe.
//Caso não invocar uma nova instancia (newInstance()) o metodo só executará
//metodos estáticos
m.invoke(cls.newInstance());
}
}
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) {
Logger.getLogger(Schedule.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String args[]) {
//passo o caminho da classe
new Schedule().executa("br.com.teste.rotinas.RotinaTeste");
}
public class RotinaTeste implements Rotina{
@Override
public void start() {
System.out.println("Executou "+toString());
}
@Override
public String toString() {
return this.getClass()+".start()";
}
}
Agradeço a Ajuda de Todos :)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)