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

时间:2015-08-10 21:33:58

标签: java function lambda function-composition

我只看过以下组合功能的例子(或使用lambdas的人)。

Function<A,B> inner = ....;
Function<B,C> outter = ....;
Function<A,C> result = outter.compose(inner);

我想使用&#34;撰写&#34;撰写以下函数。功能而不仅仅是直接调用它们。

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);
}

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

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

可以吗?提前致谢

1 个答案:

答案 0 :(得分:8)

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

中方法参考的使用
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解决方案更加丑陋。