Cómo implementar esta función a continuación
public T myFunction(Function<T> func) //T is the return type { //...some code return func(); }Y puedo usar la función como se muestra a continuación, y no necesito declarar los parámetros a, b, c en myFunction
myType result = myFunction(() -> doSomething(a, b , c))La interfaz funcional adecuada para usar entonces es Supplier<T> . No tiene un parámetro de tipo "entrada":
public <T> T myFunction(Supplier<T> func) { // myFunction logic return func.get(); } Y la invocación será tal como la tiene, asumiendo que doSomething() tiene myType como tipo de retorno.
Desafortunadamente, Java no es un lenguaje "Funcional". Entonces, cuando define un método como myFunction(Function<T> func) que especificó, myFunction requiere un objeto que amplíe la función de interfaz. La función en Java declara un solo método R apply(T t) en este caso, la función toma un solo argumento. Hay interfaces adicionales que forman parte del SDK de Java, como BiFunction , que tiene un método de aplicación que toma dos argumentos. Si necesita un método que tome una "Función" que requiera tres parámetros, deberá declarar una Interfaz con esos detalles. O podrías usar algo como. Apache Commons trifunción