Вернуть 0 или вернуть null - PullRequest
       3

Вернуть 0 или вернуть null

0 голосов
/ 04 августа 2020

У меня есть этот код, и я хочу проверить, нет ли этого кода на карте. Лучше ли вернуть примитивный тип и проверить, не равен ли он нулю? или лучше вернуть оболочку Long и вернуть null, а затем проверить, является ли ее значение null .. Есть ли какие-то преимущества друг с другом?

code = getCurrencyCode(parameterMap);
if (code != 0) {
    //do something with the code
}

private static long getCurrencyCode(Map<String, String> parameterMap) {
    for (Map.Entry<String, String> entry : MapUtils.emptyIfNull(parameterMap).entrySet()) {
        if (StringUtils.startsWith(entry.getKey(), CONFIG_CURRENCY)) {
            return  NumberUtils.createLong(entry.getValue());
        }
    }
    return 0;
}

OR

code = getCurrencyCode(parameterMap);
if (code != null) {
    //do something with the code
}

private static Long getCurrencyCode(Map<String, String> parameterMap) {
    for (Map.Entry<String, String> entry : MapUtils.emptyIfNull(parameterMap).entrySet()) {
        if (StringUtils.startsWith(entry.getKey(), CONFIG_CURRENCY)) {
            return  NumberUtils.createLong(entry.getValue());
        }
    }
    return null;
}

1 Ответ

1 голос
/ 04 августа 2020

Вот краткое изложение текущих предлагаемых решений и мои мысли по ним. Обратите внимание, что все это допустимые решения, поэтому все сводится к предпочтениям, а также к тому, кто является потребителем.

  1. верните Long и проверьте значение null
    • In в общем, I предпочитаю по возможности не использовать null. Если есть длинное значение, которое не может быть разумно представлено в наборе возможных ответов, я бы предпочел использовать его вместо нуля.
  2. вернуть long и проверить на 0
    • Это отлично работает, пока 0 является явно неполным решением - это похоже на то, что indexOf возвращает -1, если не найден. Обратите внимание, что в этом случае я бы предпочел использовать -1 вместо 0, поскольку 0 обычно является допустимым значением, а -1 обычно является недопустимым. Т.е. когнитивная нагрузка меньше с -1 над 0 обычно .
  3. Выдавать исключение, если не найдено
    • Это может иметь смысл в определенных ситуациях - - в частности, код не найти. Как правило, исключения и обработка исключений обходятся дорого. Точно так же try / catch является подробным, и поэтому, если его можно избежать, так и должно быть. решение. Мне это немного нравится, но, поскольку вы уже используете Longs ...
  4. Верните OptionalLong
    • Можете также использовать это. Лично я считаю, что это, пожалуй, лучшее решение. Он имеет определенный интерфейс, является стандартным для java 8+ и легко поддерживает Google.
  5. Возвращает конкретное c значение / тип для представления Unknown.
    • Для меня это classi c Java или объектно-ориентированное программирование в целом. Итак, есть что подумать. Я мог бы выбрать это, если бы создавал библиотеку, чтобы другие использовали эти данные. Но это также может быть излишним для вашего проекта.

Как отмечалось выше, в большинстве случаев я бы выбрал решение OptionalLong, так как оно обеспечивает баланс между чрезмерной объектно-ориентированностью и слишком индивидуальностью. Я думаю, есть аргументы в пользу перехода к объекту Currency, которые могут иметь смысл в правильном проекте.

Также, возможно, Code Review лучше подходит для этого вопроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...