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
下面如何实现这个功能
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