Java - interfaces para pasar una funcion como argumento

 
Vista:

interfaces para pasar una funcion como argumento

Publicado por César (1 intervención) el 31/05/2014 21:53:20
Buenas,

Les comento. Lo que quiero hacer es pasar una función como argumento.

Por similitud les explicaré lo que tenía programado en C++ y que ahora me gustaría hacer algo similar en Java.

En c++ el código sería similar a este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Función solver para resolver problemas por iteración -> se introduce como primer argumento una función de tres argumentos tipo double y luego varios argumentos double.
double getsolver(double funcion(double T, double FAR1, double WAR1), const double &valor_dato, const double &T_inicial, const double &FAR1, const double &WAR1){
        do{
        //... cálculos para determinar la nueva T_iteracion 
         f0 = funcion(T_iteracion, FAR1, WAR1) - valor_dato;
      }while(abs(f0)> delta)
return T_iteracion;
}
 
//A continuación, las funciones que se podían pasar como argumento, por ejemplo:
 
double getEntropia_Temperatura(double Temperatura, double FAR1, double WAR1){
            //... cálculos    
        return miDouble;
}
double getEntalpia_Temperatura(double Temperatura, double FAR1, double WAR1){
    //... cálculos    
   return miDouble;
}

Finamente, cuando quería calcular las funciones inversas (calcular la temperatura conocidas las otras propiedades) llamaba al getsolver pasándole como argumento la función directa getX_Temperatura. El solver, Iterando en la temperatura, conseguía el valor buscado.

Ejemplo:

1
2
3
4
5
6
7
8
9
double getTemperatura_Entropia(double entropia, double FAR1, double WAR1){
	double T_inicial = 200;
	return getsolver(getEntropia_Temperatura, entropia, T_inicial, FAR1, WAR1);
}
 
double getTemperatura_Entalpia(double entalpia, double FAR1, double WAR1){
	double T_inicial = 200;
	return getsolver(getEntalpia_Temperatura, entalpia, T_inicial, FAR1, WAR1);
}

La más importante es que con la misma función (solver) podía resolver diferentes funciones.

Por lo que he leido no se puede hacer de forma directa en Java. Entiendo que hay varias posibilidades (como callback o invoke para invocar métodos) pero creo que lo más parecido (y mejor solución) es crear una interface para pasar estas funciones como argumentos (http://www.javaworld.com/article/2077462/learn-java/java-tip-10--implement-callback-routines-in-java.html).

La cuestión es que llevo un tiempo pegándome y no soy capaz de encontrar una explicación clara o un código que funcione para entenderlo y aplicarlo a este caso.

Si pudieran ayudarme, mandarme un link en el que esté bien explicado (si es con ejemplo mejor) o unas líneas de código se lo agradecería.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder