ola !
como fazer pra passar, num parametro, uma instancia e um metodo, pra um metodo ?
obrigado.
ola !
como fazer pra passar, num parametro, uma instancia e um metodo, pra um metodo ?
obrigado.
Como assim passar um método? O máximo que você pode fazer é passar o retorno de um método.
Creio que o que você quer é possível ser feito utilizando-se reflection, entretanto não vejo uma utilidade para isso.
Por enquanto ainda não é possível passar métodos como parâmetros para métodos. (Ou seja, não há nada parecido com os “delegates” do C#).
Entretanto, é possível você passar uma instância de um objeto de uma classe que implemente uma determinada interface que tenha o tal método que você quer chamar dentro do outro método.
Um exemplo desses é o método Arrays.sort , que recebe uma instância de uma classe que implementa a interface Comparator, que tem um método compare.
intao, assim (explicando melhor, pra entender):
fiz um menu dinamico, e ao clicar em qquer opcao, chamo um unico metodo, q deve receber o metodo a ser executado (opcao dos menus)…
alem desse, tambem poderia utilizar numa outra situacao: estou fazendo um dialog com o processamento, mas esse processamento executa uma tarefa, e a regua fica mostrando ate o final do processamento… dae tambem poderia passar pra esse metodo do processamento, o metodo q eh pra executar no evento on init.
me resolveria pra essas duas situacoes !!!
se alguem puder dar mais dicas, eu fico muito agradecido !
obrigado
Você resolve seu problema com interfaces - pense no “design pattern” “Observer” e veja como ele é implementado no Swing (usualmente as classes se chamam AlgumaCoisaListener).
desculpe a observacao: vc tem 16871 postagens aki (ate esse momento) e eu apenas 79… q q eu quero dizer com isso ? q agradeco muuuuuuuuuuuuuuito a sua postagem, mas pra um inicante com eu, a sua explicacao, com nivel elevadissimo de conhecimento, me deixou sem entender nadica…rsss
obrigado !
Vamos dar um exemplo. Digamos que você quisesse receber um método que tivesse a seguinte assinatura:
double operacao (double x, double y);
Essa operação poderia ser, por exemplo, algo que retornasse x + y, x * y, x - y etc.
No Java ainda não dá para passar um método, como se fosse isto aqui:
class NaoCompila {
// atenção, isto não é Java!
public double somar (double x, double y) { return x + y; }
public double subtrair (double x, double y) { return x - y; }
public double fazerOperacao (double operacao (double x, double y), double p, double q) {
return operacao (p, q);
}
...
System.out.println ("O resultado da soma de 4 + 5 é " + fazerOperacao (somar, 4, 5));
System.out.println ("O resultado da soma de 4 - 5 é " + fazerOperacao (subtrair, 4, 5));
}
Mas dá para fazer um quebra-galho com interfaces, assim:
interface Operacao {
double operacao (double x, double y);
}
class Soma implements Operacao {
public double operacao (double x, double y) { return x + y; }
}
class Subtracao implements Operacao {
public double operacao (double x, double y) { return x - y; }
}
class IstoCompila {
public static double fazerOperacao (Operacao op, double p, double q) {
return op.operacao (p, q);
}
public static void main(String[] args) {
Soma somar = new Soma();
Subtracao subtrair = new Subtracao();
System.out.println ("O resultado da soma de 4 + 5 é " + fazerOperacao (somar, 4, 5));
System.out.println ("O resultado da soma de 4 - 5 é " + fazerOperacao (subtrair, 4, 5));
}
}
Se o pessoal da Sun, no Java 8, finalmente aceitar alguma coisa parecida com Closures, ( http://www.javac.info ), teremos os tais “delegates” como no C# e você terá o que você pediu (passar métodos para outros métodos).
Dica: não é preciso usar reflection.
Use reflection em outros casos, porque ela costuma ser lenta e sujeita a muitos erros. No seu caso, é mais seguro e rápido usar interfaces.