Como eu poderia chama um método ou classe dinamicamente passando uma string…
por exemplo:
Tenho um metodo ChamaMetodo que recebe como parametro uma String com o nome do outro metodo a ser chamado, tipo:
[code]ChamaMetodo(“Teste”);
// retornaria o conteudo do metodo Teste();
ChamaMetodo(“Texto”);
// retornaria o conteudo do metodo Texto();[/code]
Class classe;
try {
classe = Class.forName("br.com.exemplo.automacao.Balanca");
Method metodo;
metodo = classe.getDeclaredMethod("getDado",null);
metodo.invoke(o,null)
...
Primeiro de tudo, você tem que obter uma instância ao objeto Method, que descreve o método que você quer invocar. De onde surgirá esse objeto? De dentro do objeto que descreve sua classe. Todas as classes tem esse "descritor de classe". Se você estiver num método não estático, esse descritor pode ser obtido com getClass(). Se for um método estático, use NomeDaClasse.class.
Você pede para o descritor o método pelo nome, passando a lista de parâmetros que você deseja. Depois disso, você o método invoke, passando o objeto em que esse método será chamado e uma lista com o valor dos parâmetros. O método invoke retorna um Object, contendo o valor de retorno do método chamado.
Como no exemplo abaixo:
private void chamaMetodo(String metodo) {
try {
Method m = getClass().getMethod(metodo, new Class<?>[] {});
Object result = m.invoke(this, new Object[] {});
JOptionPane.showMessageDialog(null, result.toString() );
} catch (NoSuchMethodException e) {
// Essa exceção ocorre se o getMethod() não encontrar o método que
// você especificou
} catch (IllegalAccessException e) {
// Pode ocorrer se o método que você está invocando não for
// acessível. Você pode forçar que um método (mesmo privado!) seja
// acessível fazendo:
// m.setAcessible(true);
// antes do seu invoke.
} catch (InvocationTargetException e) {
// Essa exceção acontece se o método chamado gerar uma exceção.
// Use e.getCause() para descobrir qual exceção foi gerada no método
// chamado e trata-la adequadamente.
}
}