Какая реальная выгода от возвращения Необязательного<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.

Другие вопросы по тегам