Java 8如何在没有Lambdas的情况下编写函数?

jor*_*an3 4 java lambda function function-composition

我只看过如下组合函数(或使用lambdas的人)的例子.

Function<A,B> inner = ....;
Function<B,C> outter = ....;
Function<A,C> result = outter.compose(inner);
Run Code Online (Sandbox Code Playgroud)

我想使用"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);
}
Run Code Online (Sandbox Code Playgroud)

这不编译.我似乎无法使用java.util.function.Function的"compose"成员.我如何为传统声明的函数执行此操作?我想避免以下情况:

public class K{
  public static Function<A,C> result = (a)-> J.outter(J.inner(a));
}
Run Code Online (Sandbox Code Playgroud)

可以吗?提前致谢

Sot*_*lis 8

方法引用(和lambdas)需要在源代码中使用它们的上下文.该上下文描述了目标功能接口,提供了泛型类型推断的详细信息等.

使用方法引用

public static Function<A,C> result = (J::outter).compose(J::inner);
Run Code Online (Sandbox Code Playgroud)

没有背景.首先应该J::outter是什么?为什么?

应用一个演员来给它上下文

public static Function<A, C> result = ((Function<B, C>) J::outter).compose(J::inner);
Run Code Online (Sandbox Code Playgroud)

在我看来,这比lambda解决方案更丑陋.