【发布时间】:2016-01-20 11:15:57
【问题描述】:
假设我有一个字符串:String s = "1,2,3,4,5,6"。我想创建一个方法combineFunctions(),它将Functions 的可变长度序列作为参数,并按该顺序应用所有操作。
函数可能有不同的<T,U> 类型。
此类函数的示例用法如下:
Combine<String> c = new Combine<>(s);
List<String> numbers = c.combineFunctions(splitByComma);
Integer max = c.combineFunctions(splitByComma,convertToInt, findMax);
我尝试过的(这里的<U>在这里用处不大):
public <U> void combineFunctions(
Function<? extends Object, ? extends Object>... functions) {
}
但我一直在获取Functions 的最后一个类型。我也在考虑一种递归方法,但 varargs 参数必须是最后一个。
这种方法可以用Java实现吗?
【问题讨论】:
-
你说的“但我被困在获取最后一个函数的类型”是什么意思。你能解释一下吗?
-
看起来像
Stream和map方法。 -
如果你知道它总是会使用相对较少的参数(比如少于 10 个函数)被调用,你可以编写 10 个重载的
combine(Function<T, T1> Function<T1, T2>, ..., Function<Tn, U>)方法。这是在接受各种(但有限)数量的参数的同时保持类型安全的标准方法。
标签: java lambda functional-programming java-8