Ви використовуєте StringUtils.EMPTYзамість ""?
Я маю на увазі або як повернене значення, або якщо ви встановлюєте значення змінної String. Я не маю на увазі порівняння, тому що там ми використовуємоStringUtils.isEmpty()
Відповіді:
Звичайно, ні. Ви дійсно вважаєте "" недостатньо зрозумілим?
Константи мають, по суті, 3 варіанти використання:
Жодне тут не застосовується.
EMPTYне несе жодного значення, якого сам порожній рядок ще не має. Найголовніше, це не документує, чому ви вирішили використовувати порожній рядок у цьому конкретному випадку. Це не інакше, як називати константу ONEі робити вигляд, що був сенс використовувати цю константу замість значення.
Я використовую StringUtils.EMPTYдля приховування літералу, а також для вираження того, що return StringUtils.EMPTYбуло повністю очікуваним, і він повинен повернути порожній рядок, ""може призвести до припущення, яке ""можна легко перетворити на щось інше, і що це, можливо, була лише помилкою. Я думаю, що EMPTYце більш виразно.
StringUtils.EMPTY менш виразним, ніж "".
""виразніше, ніж використання StringUtils.EMPTY, і те, що ви сказали, не передумало з цього приводу. Я майже можу повірити, що розробники неправильно написали порожній літерал рядка дуже, дуже інколи - але я візьму ясність рядкового літералу за один раз на мільйон (і його легко знайти в тестуванні, сподіваюся ... ) помилка, особисто.
Ні, просто використовуйте "".
Буквал ""ясний, як кришталь. Немає непорозумінь щодо того, що малося на увазі. Я б не знав, навіщо для цього вам потрібна константа класу. Я можу лише припустити, що ця константа використовується у всьому пакеті, що містить StringUtilsзамість "". Однак це не означає, що ви повинні ним користуватися.
Якщо на тротуарі є камінь, його не потрібно кидати.
Я вражений тим, як багато людей із задоволенням сліпо припускають, що "" насправді є порожнім рядком і не містить (випадково?) Жодного чудового невидимого символу, що не має пробілів. Для любові до всього доброго і пристойного, використовуйте ПУСТО, коли тільки можете.
Я додаю тут свої два центи, тому що я не бачу, щоб хтось говорив про 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 , А НЕ StringUtils Apache ).
Якщо ваш клас не використовує нічого іншого із спільного, тоді буде шкода мати цю залежність саме для цієї магічної цінності.
Дизайнер 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. В іншому випадку, якщо ви намагаєтеся створити екземпляр літералу String ""кожного разу, коли 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. Зрозуміло, що використання порожнього рядка призначене, а не якась лінь ("О, для цього потрібен рядок, давайте пройдемо"""). Якщо хтось вдарить цей фрагмент коду, він двічі подумає, перш ніж вносити зміни. Крім того, якбиStringUtils.EMPTYбуло визначено як власну змінну, наприкладMyClass.EMPTY, для внесення змін до "цього подання порожнечі" потрібно було б змінити один рядок коду. Наприклад, ви можете змінити його на"<empty>"замість порожнього рядка"". Але, я думаю, це заходить занадто далеко.