Вы используете StringUtils.EMPTYвместо ""?
Я имею в виду либо возвращаемое значение, либо если вы устанавливаете значение переменной String. Я не имею в виду сравнение, потому что мы используемStringUtils.isEmpty()
Ответы:
Конечно, нет. Вы действительно думаете, что "" недостаточно ясно?
Константы имеют по существу 3 варианта использования:
Здесь не применяются.
EMPTYне имеет никакого значения, которого еще не имеет сама пустая строка. В частности, он не документирует, почему вы решили использовать пустую строку в этом конкретном случае. Это не отличается от присвоения имени константе ONEи притворства, что есть смысл использовать эту константу вместо значения.
Я использую StringUtils.EMPTY, для сокрытия литерала, а также для выражения того, что return StringUtils.EMPTYполностью ожидалось, и должна возвращать пустую строку, ""может привести к предположению, что ""его можно легко изменить на что-то еще и что это, возможно, было всего лишь ошибкой. Думаю, EMPTYвыразительнее.
StringUtils.EMPTY менее выразительным, чем "".
""более выразительным, чем использование StringUtils.EMPTY, и то, что вы сказали, не изменило моего мнения по этому поводу. Я почти могу поверить в то, что разработчики очень, очень редко пишут пустой строковый литерал неправильно, но я возьму ясность строкового литерала за один раз на миллион (и, надеюсь, легко обнаруживается при тестировании ... ) ошибка, лично.
Нет, просто используйте "".
Буквально ""чистый, как кристалл. Нет никакого недопонимания относительно того, что имелось в виду. Я бы не знал, зачем вам для этого нужна константа класса. Я могу только предположить, что эта константа используется во всем пакете, содержащем StringUtilsвместо "". Однако это не значит, что вы должны его использовать.
Если на тротуаре есть камень, его не нужно бросать.
Я поражен тем, как много людей счастливы слепо предполагать, что "" действительно пустая строка и не содержит (случайно?) Каких-либо замечательных невидимых и непробельных символов Unicode. Ради любви ко всему хорошему и порядочному, всегда используйте ПУСТОЙ.
Я добавлю сюда свои два цента, потому что я не вижу, чтобы кто-нибудь говорил об Stringинтернировании и инициализации класса:
Stringлитералы в источниках Java интернированы, что делает любой "" и StringUtils.EMPTYтот же объектStringUtils.EMPTY может инициализировать StringUtilsкласс, поскольку он обращается к своему статическому члену EMPTY только в том случае, если он не объявленfinal (JLS специфичен для этой точки). Однако это окончательный вариант, поэтому он не будет инициализировать класс.org.apache.commons.lang3.StringUtils.EMPTY См. Соответствующий ответ по интернированию строк и инициализации класса со ссылкой на JLS 12.4.1 .
StringUtilsкласса.
Я не очень люблю его использовать, return "";т.к. короче чем return StringUtils.EMPTY.
Однако одно ложное преимущество его использования заключается в том, что если вы вводите return " ";вместо return "";, вы можете столкнуться с другим поведением (относительно того, правильно ли вы тестируете пустую строку или нет).
"", я ненавижу набирать одну и ту же буквальную строку более одного раза, даже иногда только один раз. Я бы предпочел объявить константы в Constants.java , но не повторять их везде в исходном коде.
return ""; это уродливо, Я ПРЕДПОЧИТАЮ использовать return StringUtil.EMPTY(объявленный в моем собственном классе StringUtil , а НЕ Apache StringUtils ).
Если ваш класс не использует что-либо еще из общего пользования, было бы жаль иметь эту зависимость только для этого магического значения.
Дизайнер StringUtils интенсивно использует эту константу, и это правильно, но это не означает, что вы должны использовать и ее.
Честно говоря, я не вижу в этом особого смысла. Если вы хотите сравнить, например, с пустой строкой, просто используйтеStringUtils.isNotEmpty(..)
StringUtils.isNotEmpty(..)также выполняет нулевую проверку, поэтому это не совсем то же самое, что сравнение с пустой строкой.
null? в качестве 2-го аргумента equals, но результат будет тот же -false
isNotEmptyявляется противоположностью "".equals(…), следовательно, тот факт, что он будет рассматриваться nullкак пустая строка , отличается от сравнения с пустой строкой, "".equals("")→ true, "".equals(null)→ false, StringUtils.isNotEmpty("")→ false, StringUtils.isNotEmpty(null)→ false. Если вы просто хотите узнать, пуста ли строка, используйте string.isEmpty(), который имеет правильное поведение: возвращает, trueесли это пустая строка, и бросает, NullPointerExceptionесли строка null…
Я нахожу StringUtils.EMPTYполезным в некоторых случаях для разборчивости. В частности, с:
Тернарный оператор, например.
item.getId() != null ? item.getId() : StringUtils.EMPTY;
Также с помощью константы создается ссылка на StringUtils.EMPTY. В противном случае, если вы попытаетесь создать экземпляр строкового литерала ""каждый раз, когда JVM должна будет проверять, существует ли он уже в пуле строк (что, вероятно, будет, поэтому никаких дополнительных накладных расходов на создание экземпляра). Разумеется, использование StringUtils.EMPTYпозволяет избежать проверки пула строк?
StringUtils.EMPTYконстанта разрешается во время компиляции.
StringUtil.EMPTYэто константа времени компиляции, ссылка на нее компилируется в тот же байт-код, что и при ""прямом использовании . Кроме того, я не понимаю, почему тернарный оператор должен иметь какое-либо значение. Это выражение похоже на любое другое. Любая причина использовать или не использовать именованную константу также применима к тернарному оператору.
Нет, потому что мне нужно еще написать. И пустая строка является независимой от платформы пустой (в Java).
File.separator лучше, чем "/" или "\".
Но делай как хочешь. Вы не можете получить опечатку вродеreturn " ";
someString.isEmpty()вместо этого пишут нормальные программисты .
Да, в этом есть смысл. Возможно, это не единственный путь, но я очень мало вижу в том, чтобы сказать, что это «не имеет смысла».
По моему мнению:
It will still require changing everywhere if you don't define your own variable and use it in multiple places.вы собираетесь заменить пустую строку на другую?
StringUtils.EMPTY. Это дает понять, что используется пустая строка, а не какая-то лень («О, это требует String, давайте пройдем""»). Если кто-то обнаружит этот фрагмент кода, он дважды подумает, прежде чем вносить изменения. Кроме того, если бы ониStringUtils.EMPTYбыли определены как ваша собственная переменная, напримерMyClass.EMPTY, внесение изменений в «это представление пустоты» потребовало бы изменения одной строки кода. Вы можете, например, заменить его"<empty>"на пустую строку"". Но я думаю, что это заходит слишком далеко.