将空函数作为参数传递给java函数
在理解函数如何作为参数传递给方法时,我遇到了一些问题
通过搜索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)
}
}
}
有人能帮我弄清楚这个话题吗?非常感谢你
# 1 楼答案
如果要描述不返回值的函数,可以使用
Void
类型。这是一个标准Java类,但用于这种情况例如
return null;
很重要,因为从编译器的角度来看,Void
与任何其他类一样(例如String
、Integer
,等等)。它不知道它表示没有值,但是它知道返回void
的函数没有返回值这意味着编译器仍然需要在代码中使用一些
return
语句,就像它返回一个Integer
,因此您必须return null;
编辑:
但是,您可能会发现,如果您严格地处理没有返回的函数,则更适合使用
Consumer<T>
。例如:或者,使用方法引用:
# 2 楼答案
您可以使用反射API传递
void
方法作为引用,例如输出: