【发布时间】:2020-05-13 07:59:51
【问题描述】:
我在理解函数如何作为参数传递给方法时遇到了问题。
在 StackOverflow 和 StackExchange 上搜索让我找到了使用 java.util.Functions 的解决方案
public void someFunction(Functions <int[], int[]> myFunction);
(来源:https://codereview.stackexchange.com/questions/186972/passing-a-generic-function-as-parameter)
虽然这个解决方案对我来说似乎不错,但当我需要传递一个什么都不做的函数时,我会遇到问题。为了更好地理解,请考虑以下示例:
public class Example {
//do stuffs
myFunction(null);
}
public class Manager {
public void myFunction(Function<int[], void> funcToPass) { // Can't specify void as return value!
//do stuff
if(funcToPass != null) { // can't replicate such behaviour
funcToPass(someParams)
}
}
}
有人可以帮助我清楚地了解这个主题吗?非常感谢。
【问题讨论】:
-
一个
Function没有返回只是一个Consumer -
我不认为这是一个有效的答案,因为我需要一个更一般的案例。消费者会限制我只考虑具有 Void 返回值的函数。
-
确定不是一个有效的答案,它只是一个评论。但是如果您以这种方式定义您的方法,则无法 change 函数返回除声明的内容(Void)之外的任何内容 - 无论如何这对问题无关紧要,所以我将其发布为评论和不回答。为什么“不能复制这种行为”?应该使用 Java(假设函数声明正确)
-
但它确实有效(再次,假设声明正确)
-
仅供参考:
funcToPass将作为非原始类型 (mini-example) 的任何参数对实例的引用。在这种情况下实现Function,类型为Function
标签: java function class parameters void