Pessoal eu me confrontei com o seguinte problema:
Eu preciso passar para um método uma referência de um outro método;
Mas a unica forma q eu consegui fazer isso foi utilizando reflection passando por todos os métodos e comparando o nome dos métodos
ou seja se eu quizer que esse metodo seja chamado dinamicamente eu tenho que infelizmente que passar o nome do método em string… que creio que isso seja chamado de gambia…
this.methodFazAlgumaCoisa(implementation, methodName);
Se alguem ja passou por isso… e quizer da uma mão agradeço flw
Use uma interface, que contém a assinatura do método que você quer passar por referência.
Num futuro não muito distante, será possível usar closures para esse tipo de coisa, mas até então interfaces são a forma mais limpa de resolver o problema.
Eu realmente não aconselho reflection. Além do código ficar muito rebuscado, fica sujeito a erros e não existem verificações em compile time. Uma refatoração que mude o nome do método pode literalmente quebrar o seu sistema e só quem vai descobrir é o cliente.
Você pode passar uma inner class que chama o método que você quer. É uma utilização parecida com closure.
[quote=ViniGodoy]Use uma interface, que contém a assinatura do método que você quer passar por referência.
Num futuro não muito distante, será possível usar closures para esse tipo de coisa, mas até então interfaces são a forma mais limpa de resolver o problema.
Eu realmente não aconselho reflection. Além do código ficar muito rebuscado, fica sujeito a erros e não existem verificações em compile time. Uma refatoração que mude o nome do método pode literalmente quebrar o seu sistema e só quem vai descobrir é o cliente.[/quote]
Com interface tbm não:
por que a implementação que eu vou chamar o método dinâmicamente é de codigo gerado do apache cfx que faz a conexão com webservice… e são N métodos…
e eu estou utilizando reflection justamente para evitar que o futuro desenvolvedor tenha que se preocupar com questões de conexão, gerenciamento de sessao com servidor externo etc…