java 使用函数作为参数,只关心它的 return 值

java use function as parameter and only care about the return value of it

下面如何实现这个功能

public T myFunction(Function<T> func)  //T is the return type
{
  //...some code
  return func();
}

而且我可以像下面这样使用函数,不需要在myFunction中声明参数a,b,c

myType result = myFunction(() -> doSomething(a, b , c))

然后使用的正确功能接口是 Supplier<T>。它没有“输入”类型参数:

public <T> T myFunction(Supplier<T> func) {
    // myFunction logic 
    return func.get();
}

假设 doSomething() 具有 myType 作为 return 类型,调用将与您拥有的一样。

不幸的是,Java 不是一种“函数式”语言。所以当你定义一个像你指定的 myFunction(Function<T> func) 这样的方法时,myFunction 需要一个扩展接口函数的对象。 java 中的 Function 声明了一个方法 R apply(T t) 在这种情况下,Function 接受一个参数。还有其他接口是 Java SDK 的一部分,例如 BiFunction,它有一个带有两个参数的应用方法。如果您需要一个方法,该方法将采用需要三个参数的“函数”,您将必须声明一个具有这些细节的接口。或者你可以使用类似的东西。 Apache Commons TriFunction