web-dev-qa-db-ja.com

StringUtils.EMPTYは推奨されますか?

_StringUtils.EMPTY_の代わりに_""_を使用していますか?

戻り値として、またはString変数の値を設定した場合のいずれかを意味します。 StringUtils.isEmpty()を使用しているので、比較するつもりはありません

82
keuleJ

もちろん違います。 「」が十分に明確でないと本当に思いますか?

定数には、基本的に3つのユースケースがあります。

  1. 値の意味を文書化する(定数名+ javadocを使用)
  2. 共通の価値でクライアントを同期します。
  3. 特別な値へのショートカットを提供して、初期化コストを回避します

ここには適用されません。

102
David Pierre

私が使う StringUtils.EMPTY、リテラルを非表示にし、そのreturn StringUtils.EMPTYは完全に予期されていたため、空の文字列""は、""は簡単に別のものに変更できますが、これはたぶん間違いでした。 EMPTYの方が表現力が高いと思います。

50

いいえ、""を使用してください。

リテラル""は水晶のように明確です。意味について誤解はありません。そのためにクラス定数が必要な理由はわかりません。この定数は、""の代わりにStringUtilsを含むパッケージ全体で使用されていると想定できます。ただし、使用する必要があるわけではありません。

歩道に岩があれば、投げる必要はありません。

25
Erick Robertson

String interning とクラスの初期化について話している人がいないので、ここに2セントを追加します。

  • JavaソースのすべてのStringリテラルはインターンされ、any""およびStringUtils.EMPTYsameオブジェクトにします。
  • StringUtils.EMPTYの使用canStringUtilsクラスを初期化します。静的メンバーEMPTYにアクセスするのは、finalが宣言されていない場合のみです(JLSはその点に固有です)

String interningの関連する回答 および クラスの初期化 を参照してください。 JLS 12.4.1 を参照してください。

11
Matthieu

「」が実際に空の文字列であり、Unicodeの不可視の非スペーシング文字が(偶然に)含まれていないことを盲目的に想定して喜んでいる人がどれだけいるかに驚かされます。善良でまともなすべての愛のために、できる限り空を使用してください。

9
j__m

return "";return StringUtils.EMPTYより短いので、私はそれを使うのはあまり好きではありません。

ただし、1つfalseを使用する利点は、return " ";の代わりにreturn "";を入力すると、異なる動作が発生する可能性があることです(空の文字列を正しくテストするかどうか) 。

8
Romain Linsolas

クラスがコモンズの他のものを使用しない場合、この魔法の価値のためだけにこの依存関係を持つことは残念です。

StringUtilsのデザイナーはこの定数を多用します。これは正しいことですが、だからと言ってそれを使用する必要があるわけではありません。

4
cherouvim

StringUtils.EMPTYは、読みやすさのために役立つ場合があります。特に:

  1. 三項演算子。

    item.getId() != null ? item.getId() : StringUtils.EMPTY;
    
  2. メソッドから空の文字列を返し、はい、本当にそれをやりたかったことを確認します。

また、定数を使用することにより、StringUtils.EMPTYへの参照が作成されます。それ以外の場合、JVMが文字列プールに既に存在するかどうかを確認する必要があるたびに、文字列リテラル""をインスタンス化しようとすると(おそらく、追加のインスタンス作成オーバーヘッドはありません)。 StringUtils.EMPTYを使用すると、文字列プールを確認する必要がなくなりますか?

1
Tom

いいえ、私はもっと書く必要があるからです。 empty文字列はプラットフォームに依存しませんempty(Javaの場合)。

File.separatorは「/」または「\」よりも優れています。

しかし、あなたが好きなようにしてください。 return " ";のようなタイプミスはありません

1

正直なところ、どちらもあまり使われていません。空の文字列と比較する場合は、StringUtils.isNotEmpty(..)を使用します

1
Bozho