¿Cuál es la razón detrás de cheques nulos en la evaluación de expresiones de referencia método?

Yanick Salzmann:

Hay un montón de preguntas donde las personas se han dado cuenta de que la creación de un método de referencia con una expresión que se evalúa como un nullvalor dará lugar a una NullPointerException. Como ejemplo:

String s = null;
Supplier<char[]> fun = s::toCharArray;

Esto se debe a la siguiente párrafo en la especificación de Java:

En primer lugar, si la expresión de referencia método comienza con una ExpressionName o una primaria, se evalúa esta subexpresión. Si los evalúa subexpresión a nulo, una NullPointerException se eleva, y la expresión de referencia método finaliza abruptamente. Si la subexpresión completa bruscamente, la expresión de referencia método finaliza abruptamente por la misma razón.

Ahora mi pregunta es, ¿alguien le suceda a saber cuál es la razón detrás de esto (en base a las muchas preguntas confusas) especificación contraria a la intuición era / es?

La única cosa que viene a la mente es que en el siguiente caso es difícil informar con precisión el error de la NullPointerExceptionsi sucede durante la evaluación de la Supplier:

public static char[] callback(Supplier<char[]> supplier) {
    return supplier.get();
}

public static void main(String[] args) {
    String s = null;
    callback(s::toCharArray);
}
maxpovver:

La razón es el hecho de que cuando se está creando referencia método no estático, debe tener acceso a this. Cuando usted está tratando de crear referencia al objeto nulo, no hay thisninguna parte, es por eso que debe fallar en este paso, en lugar de fallar en algún lugar más en el código cuando se utiliza por primera vez.

Imagínese en un solo lugar se obtiene el objeto, guardarlo en algún lugar de referencia del método, y que su uso es completamente diferente en la parte de código. Obtendrá un NPE no en el lugar donde se cometió el error, pero muchas líneas de código de distancia.

Supongo que te gusta

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