【发布时间】:2021-12-17 14:32:24
【问题描述】:
我正在尝试通过编写以下代码来模仿 java 的 Function
interface SFunction<T, G> { G apply(T t); default <Q> SFunction<T, Q> andThen(SFunction<? super G, ? extends Q> after) { return (T t) -> { return after.apply(apply(t)); }; // return new SFunction<T, Q>() { // @Override // public Q apply(T t) { // return after.apply(apply(t)); // } // }; } }
当我在andThen 中编写以下代码时,它工作正常(指向接口的apply(T t))并完美链接其他功能实现
snippet A return (T t) -> {
return after.apply(apply(t));
};
但是在sn-p下面写的时候,就陷入了递归,逻辑上是对的
snippet B return new SFunction<T, Q>() {
@Override
public Q apply(T t) {
return after.apply(apply(t));
}
};
,但是为什么在 sn-p A 中,after.apply(apply(t)) 调用外部 apply(T t),即使内部 java 实现了匿名实现。
sn-p A 和 B 在内部和逻辑上不一样吗?
谢谢
【问题讨论】:
标签: java lambda interface functional-programming functional-interface