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