小编tez*_*zza的帖子

Java中的Func编程.Method-ref与功能应用签名不匹配但成功运行

我目前正在阅读Venkat Subramaniam的Java函数编程,到目前为止,它是一本很棒的读物.

然而,有一个特殊的例子让我感到困惑.在下面的代码示例中,有一个名为的方法setFilters(final Function<Color,Color>... filters).

这需要一个实现Function接口的列表.在代码setFilters使用方法引用叫...... camera.setFilters(Color::lighter, Color::darker);.

这很令人困惑,因为Color类没有实现Function接口,也没有匹配R apply(T t);签名的方法.

我错过了一些明显的东西吗?有人Color::darker可以解释如何将etc传递给期望的参数Function<Color,Color>

这是完整的代码示例:

package designing.fpij;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.stream.Stream;
import java.util.function.Function;
import java.awt.Color;
import java.util.function.Consumer;

@SuppressWarnings("unchecked")
public class Camera {  
  private Function<Color, Color> filter;


  public Color capture(final Color inputColor) {
    final Color processedColor = filter.apply(inputColor);
    return processedColor;
  }

  public void setFilters(final Function<Color, Color>... filters) {
    filter =
            Stream.of(filters).
                    reduce((after, before) -> filter.compose(before)).orElse(color -> color);
  }
  public Camera() {
    setFilters();
  } …
Run Code Online (Sandbox Code Playgroud)

java functional-programming java-8 method-reference

3
推荐指数
1
解决办法
199
查看次数