如何声明方法引用数组?

我知道如何以这种方式声明其他东西的数组,比如字符串:

String[] strings = { "one", "two", "tree" }; // or String[] strings = new String[] { "one", "two", "tree" }; 

但是当谈到方法引用时,我无法弄清楚如何避免创建列表并单独添加每个项目。

示例:在两个来源的几个不同匹配列表上调用方法smartListMerge

 List<Function> listGetters = new ArrayList(3); listGetters.add(TodoUser::getPendingList); listGetters.add(TodoUser::getCompletedList); listGetters.add(TodoUser::getWishList); TodoUser userA = ..., userB = ...; for (Function listSupplier : listGetters) { TodoList sourceList = listSupplier.apply(userA); TodoList destinationList = listSupplier.apply(userB); smartListMerge(sourceList, destinationList); } 

声明方法引用数组的正确方法是什么?

创建List的方法较短:

 List> listGetters = Arrays.asList(TodoUser::getPendingList, TodoUser::getCompletedList, TodoUser::getWishList); 

或(在Java 9中):

 List> listGetters = List.of(TodoUser::getPendingList, TodoUser::getCompletedList, TodoUser::getWishList); 

在你的问题中,你询问了一系列方法。 您可以这样定义:

 Method toString = String.class.getMethod("toString"); // This needs to catch NoSuchMethodException. Method[] methods = new Method[] { toString }; 

然而,在您的示例中,您使用函数,您也可以将其放入数组中:

 Function toStringFunc = String::toString; Function[] funcs = new Function[] { toStringFunc }; 

请记住,为第一个或第二个示例的java.util.function.Function分别导入java.lang.reflection.Method

据我所知,没有用于定义列表的简写。

你不能创建一个通用数组,但你可以声明一个(虽然有警告):

 @SuppressWarnings("unchecked") Function[] arr = new Function[2]; arr[0] = String::length;