【发布时间】:2018-01-02 09:12:17
【问题描述】:
我已经解决了一个 Y 组合器问题。刚才发现不能递归引用泛型参数。
Y = λf.(λx.f (x x)) (λx.f (x x))
例如:
IntUnaryOperator fact = Y(rec -> n -> n == 0 ? 1 : n * rec.applyAsInt(n - 1));
IntUnaryOperator Y(Function<IntUnaryOperator, IntUnaryOperator> f) {
return g(g -> f.apply(x -> g.apply(g).applyAsInt(x)));
}
IntUnaryOperator g(G g) {
return g.apply(g);
}
// v--- I want to remove the middle-interface `G`
interface G extends Function<G, IntUnaryOperator> {/**/}
问:如何在方法g上使用泛型参数来避免引入额外的接口G,并且泛型参数应该避免UNCHECKED的警告?
提前致谢。
【问题讨论】:
-
我很确定这是不可能的。 Java 没有提供一种方法来要求给定的泛型参数是功能接口 AFAIK。
标签: java generics functional-programming java-8