Рекомендуется ли StringUtils.EMPTY?

Используете ли вы StringUtils.EMPTY вместо ""?

Я имею в виду либо как возвращаемое значение, либо если вы задаете значение переменной String. Я не имею в виду для сравнения, потому что там мы используем StringUtils.isEmpty()

Ответ 1

Конечно нет. Вы действительно думаете, что "" недостаточно ясно?

Константы имеют по существу 3 варианта использования:

  • Документируйте значение значения (с постоянным именем + javadoc)
  • Синхронизация клиентов с общим значением.
  • Предоставьте ярлык для специального значения, чтобы избежать некоторых затрат на инициализацию.

Здесь не применяются.

Ответ 2

Я использую StringUtils.EMPTY для скрытия литерала, а также для выражения того, что return StringUtils.EMPTY был полностью ожидаемым, и там должна была возвращаться пустая строка, "" может привести к предположению, что "" можно легко изменить во что-то иначе, и это может быть только ошибка. Я думаю, что EMPTY более выразителен.

Ответ 3

Нет, просто используйте "".

Литерал "" прозрачен как кристалл. Нет никакого недоразумения относительно того, что подразумевалось. Я бы не знал, зачем вам нужна константа класса. Я могу только предположить, что эта константа используется во всем пакете, содержащем StringUtils вместо "". Это не значит, что вы должны использовать его.

Если на тротуаре есть скала, вам не нужно ее бросать.

Ответ 4

Мне не очень нравится использовать его, поскольку return ""; короче return StringUtils.EMPTY.

Однако одно ложное преимущество использования этого заключается в том, что если вы наберете return " "; вместо return "";, вы можете столкнуться с другим поведением (относительно правильной проверки пустой строки или нет).

Ответ 5

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

Дизайнер StringUtils сильно использует эту константу, и это правильно, но это не значит, что вы также должны использовать ее.

Ответ 6

Я добавлю свои два цента здесь, потому что я не вижу, чтобы кто-то говорил о String interning и инициализации класса:

  • Все литералы String в источниках Java интернированы, делая любые "" и StringUtils.EMPTY тем же самым объектом
  • Использование StringUtils.EMPTY может инициализировать класс StringUtils, поскольку он обращается к его статическому члену EMPTY , только если он не объявлен final (JLS специфичен в этой точке)

См. связанный ответ на интернирование строк и Инициализация класса, ссылаясь на JLS 12.4.1.

Ответ 7

Я поражен тем, как много людей счастливы слепо предположить, что "" действительно пустая строка и не случайно (случайно) содержит любой из Unicode замечательных невидимых и непересекающихся символов. Для любви ко всему, что хорошо и порядочно, используйте ПОМОЩЬ, когда можете.

Ответ 8

Нет, потому что мне больше писать. И пустая строка является независимой от plattform (на Java).

File.separator лучше, чем "/" или "\".

Но делай, как хочешь. Вы не можете получить опечатку типа return " ";

Ответ 9

Честно говоря, я тоже не вижу большого смысла. Если вы хотите сравнить egainst с пустой строкой, просто используйте StringUtils.isNotEmpty(..)

Ответ 10

Я нахожу StringUtils.EMPTY полезным в некоторых случаях для удобочитаемости. В частности, с:

  • Тернарный оператор, например.

    item.getId() != null ? item.getId() : StringUtils.EMPTY;
    
  • Возвращение пустой строки из метода, чтобы подтвердить, что да, я действительно хотел это сделать.

Также с помощью константы создается ссылка на StringUtils.EMPTY. В противном случае, если вы попытаетесь создать экземпляр String "" каждый раз, когда JVM будет проверять, существует ли он в пуле String (что, скорее всего, будет, так что дополнительные затраты на создание экземпляра не будут). Конечно, использование StringUtils.EMPTY позволяет избежать проверки пула строк?