我有一个功能接口(interface),可以将标准 jdk 功能扩展到简单的泛型类型。现在我想使用 andThen 组合两个函数,这会引发编译器错误
Error:(25, 25) java: method andThen in interface
java.util.function.Function<T,R>
cannot be applied to given types;
required:java.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
found:ui.instrumentation.api.transformation.Transformer<T,R>
reason: cannot infer type-variable(s) V (argument mismatch;ui.instrumentation.api.transformation.Transformer<T,R>
cannot be converted tojava.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
)
示例代码如下:
public interface Transformer<T,R> extends Function<Message<T>, Message<R>> {
static <T, R> Transformer<T, R> combine2(Transformer<T, R> first, Transformer<T, R> second) {
return first.andThen(second));
}
}
有没有一种方法可以组合扩展标准 Function 接口(interface)的函数,或者有更好的方法吗?
最佳答案
你需要修复你的泛型,而不是使用 andThen
,它只会返回一个 Function
,你最好自己内联 lambda:
static <T1, T2, T3> Transformer<T1, T3> combine2(Transformer<T1, T2> first, Transformer<T2, T3> second) {
return (Message<T1> input) -> second.apply(first.apply(input));
}
关于Java 8 扩展函数接口(interface)并组合它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37015799/