Вы используете 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>"
на пустую строку""
. Но я думаю, что это заходит слишком далеко.