Como passar um metodo como parametro

7 respostas
J

Alguem pode me auxiliar

Gostaria de poder ter um nome de um metodo guardado numa variavel e poder passar
a variavel e outos parametros.

Exemplo:

class calcula{

public static void main (String args[]){

aciona a = new aciona();

a.nome do metodo(10,6);

este nome do metodo seria uma variavel

}
}

class aciona{

void soma(int a, int b){

System.out.println(a+b);

}
void mult(int a, int b){

System.out.println(a*b);

}

}

Grato.

7 Respostas

samuelhenriquerj

Não entendi bem o q vc quer fazer, mas vc poderia passar o objeto(que contém métodos e atributos).
Explicar melhor o q vc quer fazer exatamente.

D

Neste caso vc quer efetuar a operação matemática ou fazer outra coisa?

explica melhor oq vc quer…

flow

italo.vendrameto

Vc pode usar reflection para fazer isso, com base em uma String com o nome do método, e os parâmetro que ele recebe chamar o método desejado

no seu caso acho que isso deve funcionar

Class[] classesParametro = new Class[2]; classesParametro[0] = new Integer(0).getClass(); classesParametro[1] = new Integer(0).getClass(); Object[] objetosParametro = new Object[2]; objetosParametro[0] = new Integer(10); objetosParametro[1] = new Integer(6); try { a.getClass().getMethod("soma",classesParametro).invoke(a, objetosParametro); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); }

Detalhe para isso funcionar seus métodos devem receber Ojbetos Integer e não ipo primitivos int

yorgan

Deixa eu ver se entendi a logica do que quer fazer. Você quer atribuir uma variável com o nome do método e usar essa variavel para chamar ele?
Não seria melhor utilizar uma condicional IF ou um Switch Case?
tipo
String metodo = “soma”
int a = 10
int b = 11
if (metodo.equals(“soma”) a.soma(a, b);

Seria isso?
Abraço

H

[color=red]Não é possível passar métodos como parâmetro.[/color]

Não sei qual séria também a utilidade disto, mas se for para a classe executar o método com os parâmetros passados.

Você pode fazer assim.

/**
 * @author Vitor Hugo
 *
 */
public class Algebra {
	
	public void operacao(char tipo , int... valor) {
		switch (tipo) {
		case '+':
			System.out.println(soma(valor));
			break;
		case '-':
			System.out.println(subtracao(valor));
			break;
		case '*':
			System.out.println(multiplicacao(valor));
			break;
		default:
			System.out.println("não foi possivel executar nenhum operação.");
			break;
		}
	}
	
	public int soma(int... valor) {
		int resultado = 0;
		for(int i = 0 ; i < valor.length ; i++) {
			resultado += valor[i];
		}
		return resultado;
	}
	
	public int subtracao(int ... valor) {
		int resultado = 0;
		for(int i = 0 ; i < valor.length ; i++) {
			resultado -= valor[i];
		}
		return resultado;
	}
	
	public int multiplicacao(int ...valor) {
		int resultado = 0;
		
		if(valor.length > 0) {
			resultado = valor[0];
		}
		
		for(int i = 1 ; i < valor.length ; i++) {
			resultado *= valor[i];
		}
		return resultado;
	}
	
	public static void main(String[] args) {
		Algebra algebra = new Algebra();
		algebra.operacao('+',1,2,1);
	}

}

Dá uma olhada neste código e ve se te atendi.

marciobarroso

Você pode fazer como o italo.vendrameto indicou, mas reflection é como bebida alcólica. Deve ser usada com moderação.

[]'s

peczenyj

É possivel passar um objeto do tipo Method como argumento de outro objeto.

Entretanto vc precisa usar reflection.

import java.lang.reflect.*;

public class A{
        public void doIt()
        {
                System.out.println("ola!");
        }

        public void invokeMethod(Method m)throws Exception
        {
                m.invoke(this,new Object [0]); // perceba que eu passo this !
        }
        public static void main(String []xxx)
        {
                A a = new A();

                try {
                        Method something =
                        a.getClass().getDeclaredMethod("doIt", new Class[0]);

                        a.invokeMethod(something); // Aqui enviamos o metodo doIt !
                }catch (Exception e){
                        e.printStackTrace();
                }
        }
}
Criado 4 de outubro de 2007
Ultima resposta 4 de out. de 2007
Respostas 7
Participantes 8