Существует множество вопросов, в которых люди поняли, что создание ссылки на метод с выражением, которое оценивается как значение null
, приведет к NullPointerException
.Например:
String s = null;
Supplier<char[]> fun = s::toCharArray;
Это связано со следующим абзацем в спецификации java:
Во-первых, если выражение ссылки на метод начинается с ExpressionName или Primary, этоподвыражение оценивается.Если подвыражение имеет значение null, возникает исключение NullPointerException, и выражение ссылки на метод завершается преждевременно.Если подвыражение завершается внезапно, то выражение ссылки на метод завершается преждевременно по той же причине.
Теперь мой вопрос: кто-нибудь случайно знает причину этого (основываясь на многих запутанных вопросах), противоречащих интуиции?спецификация была / есть?
Единственное, что мне приходит в голову, это то, что в следующем случае трудно точно сообщить об ошибке NullPointerException
, если она произошла во время оценки Supplier
:
public static char[] callback(Supplier<char[]> supplier) {
return supplier.get();
}
public static void main(String[] args) {
String s = null;
callback(s::toCharArray);
}