La referencia al método es ambigua cuando se usan lambdas y genéricos

Recibo un error en el siguiente código, que creo que no debería estar allí ... Usando JDK 8u40 para compilar este código.

public class Ambiguous {
    public static void main(String[] args) {
        consumerIntFunctionTest(data -> {
            Arrays.sort(data);
        }, int[]::new);

        consumerIntFunctionTest(Arrays::sort, int[]::new);
    }

    private static <T> void consumerIntFunctionTest(final Consumer<T> consumer, final IntFunction<T> generator) {

    }

    private static <T> void consumerIntFunctionTest(final Function<T, ?> consumer, final IntFunction<T> generator) {

    }
}

El error es el siguiente:

Error: (17, 9) java: la referencia a consumerIntFunctionTest es ambigua tanto en el método consumerIntFunctionTest (java.util.function.Consumer, java.util.function.IntFunction) en net.tuis.ubench.Ambiguous y en el método consumerIntFunctionTest (java.util. function.Function, java.util.function.IntFunction) en net.tuis.ubench.Ambiguous match

El error ocurre en la siguiente línea:

consumerIntFunctionTest(Arrays::sort, int[]::new);

Creo que no debería haber ningún error, ya que todosArrays::sort las referencias son de tipovoid, y ninguno de ellos devuelve un valor. Como puedes observar,hace trabajo cuando explícitamente amplío elConsumer<T> lambda

¿Es esto realmente un error en javac, o el JLS establece que la lambda no puede expandirse automáticamente en este caso? Si es lo último, todavía pensaría que es extraño, ya queconsumerIntFunctionTest con como primer argumentoFunction<T, ?> No debe coincidir.

Respuestas a la pregunta(1)

Su respuesta a la pregunta