是否建议使用StringUtils.EMPTY?

keu*_*leJ 84 java apache-commons

你用StringUtils.EMPTY而不是""吗?

我的意思是作为返回值或者如果设置String变量的值.我不是要比较,因为我们使用StringUtils.isEmpty()

Dav*_*rre 103

当然不是.你真的认为""不够清楚吗?

常量基本上有3个用例:

  1. 记录值的含义(使用常量名称+ javadoc)
  2. 使用公共值同步客户端.
  3. 提供特殊值的快捷方式以避免某些初始化成本

没有在这里适用.

  • 我仍然看到`StringUtils.EMPTY`的一个次要和罕见的用例.它清楚地表明空字符串的使用是有意的,而不是某种懒惰("哦,这需要一个字符串,让我们传递`"""").如果有人点击这段代码,他会在做出更改前三思而后行.另外,如果将`StringUtils.EMPTY`定义为您自己的变量,如`MyClass.EMPTY`,则更改"空虚表示"将需要更改一行代码.例如,您可以将其更改为"<empty>"`而不是空字符串`""`.但是,我认为这有点太过分了. (28认同)
  • 最后,我有一些理智的论点来推动狂热者,而不是每次都独自思考.谢谢. (4认同)
  • @AndrewTFinnell这个名字`EMPTY`没有任何空字符串本身没有的含义.最值得注意的是,它没有记录*为什么*您决定在该特定情况下使用空字符串.命名常量"ONE"并假装使用该常量而不是值时,没有什么不同. (4认同)
  • 否决票只是因为,不,我实际上认为“”不够清晰:(是否为空白?是否为空?在其中是否有空格,因为我的字体很小,所以我看不到吗?是空的吗?有任何奇怪的“不可见”字符吗? (4认同)
  • EMPTY 怎么没有意义?EMPTY 满足列表中的 1 和 2。有经验的开发人员严重低估了初级开发人员使用“”这样简单的事情的可能性。 (3认同)
  • 对于每个说“””的人来说,很容易错过,你没有其他字符串常量吗?知道其中任何一个的末尾可能有一个额外的空格,你晚上怎么睡觉? (3认同)
  • 是的“”根本不清楚。它难以阅读且容易错过。 (2认同)

Chr*_*wes 53

我使用StringUtils.EMPTY,为了隐藏文字,并表达return StringUtils.EMPTY完全预期,并应该返回一个空字符串,""可以导致""可以很容易地改变成其他东西的假设,这可能只是一个错误.我认为EMPTY更具表现力.

  • 正如其他人建议的那样:你是否也使用ZERO 0和ONE 1? (36认同)
  • 我发现`StringUtils.EMPTY` _less_表达比``"`. (16认同)
  • 我不会将特殊的'空'案例与整数文字的使用进行比较. (6认同)

Eri*_*son 27

不,只是使用"".

文字""清晰如水晶.什么意思没有误解.我不知道为什么你需要一个类常量.我只能假设这个常量在包含的整个包中使用StringUtils而不是"".但这并不意味着你应该使用它.

如果人行道上有岩石,你就不必扔掉它.

  • "如果人行道上有岩石,你就不必扔掉它." 告诉我6岁的儿子. (6认同)

Mat*_*ieu 11

我会在这里加上我的两分钱因为我没有看到有人谈论String实习和类初始化:

  • 所有String的Java源代码文字被拘禁,使得任何 ""StringUtils.EMPTY同一对象
  • 使用StringUtils.EMPTY can初始化StringUtils类,因为EMPTY 只有在未声明它时才final访问其静态成员(JLS在该点上是特定的)

看到一个关于字符串实习相关答案类初始化,指的是JLS 12.4.1.

  • “仅当它未声明为final时”,因此由于该字段被声明为final,因此访问它**不会**导致`StringUtils`类的初始化。 (2认同)

j__*_*__m 11

令我惊讶的是,有多少人乐于盲目地认为""确实是一个空字符串,并且(不小心?)包含任何Unicode的精彩不可见和非间距字符.对于所有优秀和体面的人的爱,尽可能使用EMPTY.

  • 我很好奇 - 你有没有看到这种情况发生在代码中?如果是这样,是偶然的还是故意的?看起来很难做到意外,如果是故意的话,我可以很容易地用非空的EMPTY常量创建我自己的StringUtils类,并参考它. (3认同)
  • @AndrewTFinnell我当然可以看到,一般来说,这可能会导致问题.但是你经常看到一个非空的空的String常量? (3认同)
  • @IanRobertson是的,我看到过这种情况.实际上经常.人们一直从网站剪切和粘贴,从一个代码集切换到另一个代码集.还有一些公司仍然使用Clear Case,它使用古老的代码集,然后盲目地翻译成windows ISO集,然后如果转移到Git则转换为UTF-8.我花了无数个小时修复代码集问题.包括这一个. (2认同)

Rom*_*las 8

我真的不喜欢使用它,因为return "";它短于return StringUtils.EMPTY.

但是,使用它的一个错误优点是,如果您键入return " ";而不是return "";,则可能会遇到不同的行为(关于是否正确测试空字符串).

  • 你有没有观察到这实际上是一个问题(使用""意外地你的意思"")?就个人而言,我发现文字更具可读性,而且从来没有给我带来任何问题. (13认同)
  • @Jon不,的确,但我试图找到使用它的优势;) (2认同)
  • I**THINK**`return"";`很丑,我**PREFER**使用返回`StringUtil.EMPTY`(在我自己的类中声明**StringUtil**,而不是Apache的**StringUtils**). (2认同)

che*_*vim 6

如果您的班级不使用公共资源中的任何其他内容,那么仅仅为了这个神奇的价值而拥有这种依赖性将是一种遗憾。

StringUtils 的设计者大量使用了这个常量,这是正确的做法,但这并不意味着您也应该使用它。

  • 这取决于上下文。如果这是一个 FCKEditorStringUtils,它们的 EMPTY 将是“&lt;p&gt; &lt;/p&gt;”,我宁愿看到 EMPTY 被重用,而不是在类中的任何地方复制这个神奇的值。因此,EMPTY 可能是指 EMPTY_CONTENT 而不是 EMPTY_STRING(所以您的零示例有点不公平)。你不会重用一个 ERROR_VISA_INVALID=0 常量吗? (6认同)