¿Por qué Java no se queja de una llamada ambigua?

HPH:

Una interfaz de servicio declara dos métodos que aparentemente hacen el mismo proceso:

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

El servicio superior que se llama, como a continuación:

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

La cual uno de los métodos de servicio van a ser llamado y por qué el compilador no se queja una llamada ambigua en este contexto?

TJ Crowder:

La resolución del método elige el más específica método de emparejamiento cuando hay varias coincidencias posibles. Dado que UnaryOperator<T>se extiende Function<T,T>, en caso de que lambda coincide con él (y lo hace), es más específico que Function<T, T>lo que el UnaryOperatorserá utilizado sobrecarga.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=172743&siteId=1
Recomendado
Clasificación