Какие существуют шаблоны для разыменования объекта, допускающего обнуление? - PullRequest
1 голос
/ 19 февраля 2012

Существуют ли шаблоны, которые похожи на оператор безопасной навигации Groovy ? Это где нулевое значение имеет смысл, и было бы неправильно выдавать исключение NullPointerException.

Кроме проверки на ноль, какие еще варианты? Класс String предоставляет статический метод для разыменования, возможно, нулевых значений, но, похоже, этот шаблон не слишком широко используется, кроме класса Objects . В проекте Google Guava есть класс Необязательный , но для этого требуется, чтобы вызывающая сторона предоставляла значение по умолчанию, которое кажется слишком большим по сравнению с оператором безопасной навигации, и когда вы просто хотели бы, чтобы оно в большинстве случаев было нулевым. Что-то похожее на это:

com.google.common.base.Optional.of(fooBar).
    or(org.mockito.Mockito.mock(FooBar.class));

шаблон нулевого объекта или опция монада в Scala - это не то, что я ищу, или предложения о добавлении таких операторов в будущие версии Java, я ищу шаблоны, которые можно применять в Java сейчас.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2012

Неа.Просто хороший старомодный если-еще.Вы можете использовать троичный оператор, если он более похож на шаблон.Вы могли бы создать что-то особенное с анонимными классами и Callable с и тому подобное, но это было бы очень, очень уродливо в Java.

2 голосов
/ 19 февраля 2012

«Безопасный» оператор навигации - это, на мой взгляд, действительно плохая идея , поскольку он подавляет исключения и позволяет разработчикам обходиться ошибочным кодом.

В основном нужно рассмотреть только три случая:

  • Если у вас есть ноль, где он не должен быть, у вас есть ошибка, и быстро и громко провалится . NullPointerException - совершенно хороший способ сделать это, хотя некоторые будут утверждать, что у вас должны быть тесты, которые ранее обнаружили случайный ноль. Обратите внимание, что Fail-Fast - очень важный принцип построения надежных систем, поэтому вы должны научиться любить свои исключения NullPointerException. Они там, чтобы помочь вам создать лучшее программное обеспечение. Вы должны исправить NPE, исправляя свой код, а не игнорируя / подавляя его!
  • Если значение NULL разрешено, но требует особой обработки (например, значение по умолчанию), то вы должны явно указать об этом в своем коде. Для этого неплохо написать проверку if / else null, иначе вы можете использовать вспомогательную функцию, которая сама обрабатывает нулевой регистр.
  • Если пустое значение разрешено, но не требует специальной обработки, вам не нужно ничего делать. Просто передайте его как обычно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...