代码之家  ›  专栏  ›  技术社区  ›  HPH

为什么Java不抱怨一个模糊的调用?

  •  5
  • HPH  · 技术社区  · 7 年前

    服务接口声明两个方法,它们显然执行相同的处理:

    interface Service<T> {
        <R> R process(Function<? super T, ? extends R> function);
        T process(UnaryOperator<T> operator);
    }
    

    上面的服务调用如下:

    void process(Service<CharSequence> service) {
        service.process(sequence -> sequence.subSequence(0, 1));
    }
    

    将调用哪一个服务方法,为什么编译器不抱怨这种上下文中的不明确调用?

    1 回复  |  直到 7 年前
        1
  •  11
  •   T.J. Crowder    7 年前

    方法分辨率选择 most specific matching method 当有多个可能的匹配时。自从 UnaryOperator<T> 延伸 Function<T,T> ,如果lambda与之匹配(确实如此),则它比 Function<T, T> 所以 UnaryOperator 将使用过载。