Java 8 如何在没有 Lambda 的情况下编写函数?
Java 8 How Compose Functions without Lambdas?
我只看到了如下示例,用于编写函数(或使用 lambda 的人)。
Function<A,B> inner = ....;
Function<B,C> outter = ....;
Function<A,C> result = outter.compose(inner);
我想使用 "compose" 功能编写以下函数,而不仅仅是直接调用它们。
public class J{
public static B inner(final A a){...}
public static C outter(final B b){...}
}
public class K{
public static Function<A,C> result = (J::outter).compose(J::inner);
}
这无法编译。我似乎无法使用 java.util.function.Function 的那个 "compose" 成员。对于传统声明的函数,我该怎么做?我想避免以下情况:
public class K{
public static Function<A,C> result = (a)-> J.outter(J.inner(a));
}
可以吗??提前致谢
方法引用(和 lambda)需要 上下文 才能使它们在源代码中有意义。该上下文描述了目标功能接口,提供了泛型类型推断的详细信息等。
方法引用的使用
public static Function<A,C> result = (J::outter).compose(J::inner);
没有上下文。第一个 J::outter
应该是什么?为什么?
应用强制转换为其提供上下文
public static Function<A, C> result = ((Function<B, C>) J::outter).compose(J::inner);
在我看来,这比 lambda 解决方案更丑陋。
我只看到了如下示例,用于编写函数(或使用 lambda 的人)。
Function<A,B> inner = ....;
Function<B,C> outter = ....;
Function<A,C> result = outter.compose(inner);
我想使用 "compose" 功能编写以下函数,而不仅仅是直接调用它们。
public class J{
public static B inner(final A a){...}
public static C outter(final B b){...}
}
public class K{
public static Function<A,C> result = (J::outter).compose(J::inner);
}
这无法编译。我似乎无法使用 java.util.function.Function 的那个 "compose" 成员。对于传统声明的函数,我该怎么做?我想避免以下情况:
public class K{
public static Function<A,C> result = (a)-> J.outter(J.inner(a));
}
可以吗??提前致谢
方法引用(和 lambda)需要 上下文 才能使它们在源代码中有意义。该上下文描述了目标功能接口,提供了泛型类型推断的详细信息等。
方法引用的使用
public static Function<A,C> result = (J::outter).compose(J::inner);
没有上下文。第一个 J::outter
应该是什么?为什么?
应用强制转换为其提供上下文
public static Function<A, C> result = ((Function<B, C>) J::outter).compose(J::inner);
在我看来,这比 lambda 解决方案更丑陋。