Я намерен запустить JEP / JSR, чтобы ввести альтернативный оператор доступа в Спецификацию языка Java. Я выяснил, как могло бы выглядеть предложение, и теперь я хочу собрать отзывы о нем (например, если я 999-й человек, предложивший это). Я хочу сделать это предпочтительно перед тем, как фактически начать предложение. Однако, похоже, нет ни форума, ни форума, посвященного openJDK или процессу сообщества Java. По крайней мере, я не смог ничего найти. Однако я нашел канал IRC #openjdk, но, кроме людей, входящих и выходящих, там, похоже, нет связи.
Если я хочу пойти наименее инвазивным / навязчивым способом донести свою идею до других людей, какой путь я бы выбрал? Нет ли альтернативы, кроме фактического запуска JSR и ожидания активной обратной связи?
Помимо самого вопроса , потому что его спросили, какова точная идея:
Язык программирования Java позволяет связывать выражения
для того, чтобы обозначить поток операций
в более широком выражении и для облегчения доступа к «глубоким» значениям.
String fieldText = tableProvider.getTable(tableKey).getRow(rowKey).getField(columnKey).text;
Однако, если средство доступа '.'
пытается получить доступ к нулевому объекту,
Выдается исключение NullPointerException, что делает любой непроверенный доступ рискованным.
Даже если запасной вариант для такого случая - просто null
или статическое примитивное значение, разработчик
необходимо явно обрабатывать все возможные сценарии NullPointer. В качестве альтернативы они
обычно можно поймать NullPointerException
, который требует
возвращаемое значение для хранения в переменной, определенной в области видимости за пределами
блок try-catch
, поэтому к нему можно будет получить доступ вне оператора try-catch
. Однако это также
ловит NullPointerExceptions
, брошенный в любой доступный метод, который
может быть не предназначен.
Чтобы избежать этого, предлагается новый метод доступа, который отменяет разрешение
связанного выражения, в случае, если средство доступа получит доступ к нулевому
объект, и вместо этого возвращается к null
или к указанному значению по умолчанию.
String fieldText =
tableProvider.getTable(tableKey)°getRow(rowKey)°getField(columnKey)°text;
int i = tableProvider.getTable(tableKey)°getRow(rowKey)°getField(columnKey)°index ?: (-1);
В этом примере, если какой-либо из методов вызывает (getTable, getRow или
getField) return null
, все цепочечное выражение завершится
и вернуть null
(или -1
), а не выдавать исключение NullPointerException.
Выше приведен раздел «Мотивация» простого JEP / JSR, который я написал.
°
- это просто заполнитель для любого оператора, который не вызовет произвольной интерпретации. Фактический черновик также определяет кучу не целей, которые, среди прочего,
- Не нужно обрабатывать
null
в местах, где null
не ожидается.
- Устаревать исключение NullPointerException.
- Обычно заменяют '.' сбруя.
- Поймать уже сгенерированные исключения NullPointerException.
- Как правило, в качестве возвращаемого типа заменить класс Optional в его функции.
Edit:
Похоже, что концепция, которую я предлагаю, уже является частью kotlin (среди прочих), но состоит из двух функций: «оператор безопасной навигации» и «оператор elvis». На первом я хочу сосредоточиться.