Какая реальная выгода от возвращения Необязательного<Map <String, String >>, а не только пустой Map<String, String>
Если мой код вернется Map<String, String>
конечно, но может быть пустым. Есть ли преимущество преобразования его в возвращение Optional<Map<String, String>>
, Добавит ли это какую-либо выгоду пустым, но не нулевым экземплярам?
1 ответ
Как и многие предметы в компьютерном программировании, он зависит (тм).
То, как я использую опционально, является альтернативой нулю (в двух словах). Одно из его преимуществ заключается в том, что он заставляет вызывающую программу учитывать, что возвращаемое значение может отсутствовать и что это допустимое условие... Рассмотрим цитаты из ответов, связанных выше:
отсутствие значения является более точной формулировкой, чем ноль
а также
Любому читателю вашего кода или потребителю вашего API придется биться из-за того, что там ничего не может быть, и перед доступом к значению необходима проверка.
Поэтому, когда я вижу подпись возвращаемого типа Optional<Map<String, String>>
Я думаю об этом как тип возврата из функции, где пустой Map
может быть допустимым возвращаемым значением, но так же и полное отсутствие Map
,
Примеры этого включают getCachedFavoriteColors
, findInvalidValuePairs
и т. д. В первом случае не может быть никаких пользователей, которые бы возвращали пустое Map
- но может не быть значения кэша, которое вернуло бы неверный Optional
, Во втором случае может отсутствовать какая-либо недопустимая пара значений, которая снова будет возвращать пустую Map
, но там также не может быть Invalidator
, Вы поняли идею.
Обратите внимание, что в некоторых из приведенных выше случаев вы можете выдать исключение, а не возвращать недопустимое Optional
, Это ваше решение как дизайнера API.