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.
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.
Neste caso vc quer efetuar a operação matemática ou fazer outra coisa?
explica melhor oq vc quer…
flow
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
Outubro 4, 2007, 11:43am
#5
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
hugov
Outubro 4, 2007, 11:52am
#6
[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.
[code]/**
*/
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);
}
}[/code]
Dá uma olhada neste código e ve se te atendi.
Você pode fazer como o italo.vendrameto indicou, mas reflection é como bebida alcólica. Deve ser usada com moderação.
[]'s
É possivel passar um objeto do tipo Method como argumento de outro objeto.
Entretanto vc precisa usar reflection.
[code]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();
}
}
}[/code]