Como passar uma instancia e um metodo?

7 respostas
G

ola !

como fazer pra passar, num parametro, uma instancia e um metodo, pra um metodo ?

obrigado.

7 Respostas

B

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.

T

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.

G

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

T

Você resolve seu problema com interfaces - pense no “design pattern” “Observer” e veja como ele é implementado no Swing (usualmente as classes se chamam AlgumaCoisaListener).

G

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 !

T

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));
     }
}
T

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.

Criado 7 de agosto de 2009
Ultima resposta 7 de ago. de 2009
Respostas 7
Participantes 3