なぜJavaはあいまいな呼び出し文句を言っていないですか?

HPH:

サービス・インターフェースは、明らかに、同様の処理を行う2つのメソッドを宣言します。

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

サービスメソッドのどちらが呼び出されることしようとしていると、なぜコンパイラは、このコンテキストではあいまいな呼び出し文句ないのですか?

TJクラウダー:

方法解像度は選択最も特定のマッチング方法の複数の可能な一致があります。以来UnaryOperator<T>拡張Function<T,T>そのラムダがそれに一致する(とそれがない)場合、それはより具体的ですFunction<T, T>ので、UnaryOperator過負荷が使用されます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=172739&siteId=1