web-dev-qa-db-fra.com

StringUtils.EMPTY est-il recommandé?

Utilisez-vous StringUtils.EMPTY Au lieu de ""?

Je veux dire soit comme valeur de retour, soit si vous définissez la valeur d'une variable String. Je ne veux pas de comparaison, car là, nous utilisons StringUtils.isEmpty()

82
keuleJ

Bien sûr que non. Pensez-vous vraiment que "" n'est pas assez clair?

Les constantes ont essentiellement 3 cas d'utilisation:

  1. Documenter la signification d'une valeur (avec nom constant + javadoc)
  2. Synchronisez les clients sur une valeur commune.
  3. Fournir un raccourci vers une valeur spéciale pour éviter certains coûts initiaux

Aucun ne s'applique ici.

102
David Pierre

J'utilise StringUtils.EMPTY, pour cacher le littéral et aussi pour exprimer que return StringUtils.EMPTY était entièrement attendu et il devrait renvoyer une chaîne vide, "" peut conduire à l'hypothèse que "" peut être facilement changé en quelque chose d'autre et ce n'était peut-être qu'une erreur. Je pense que le EMPTY est plus expressif.

50

Non, utilisez simplement "".

Le littéral "" est clair comme du cristal. Il n'y a aucun malentendu quant à ce que l'on voulait dire. Je ne saurais pas pourquoi vous auriez besoin d'une constante de classe pour cela. Je peux seulement supposer que cette constante est utilisée dans tout le paquet contenant StringUtils au lieu de "". Cela ne signifie pas pour autant que vous devriez l'utiliser.

S'il y a un rocher sur le trottoir, vous n'avez pas à le jeter.

25
Erick Robertson

Je vais ajouter mes deux cents ici parce que je ne vois personne parler de String interning et initialisation de classe:

  • Tous les littéraux String dans Java sont internées, ce qui fait n'importe quoi"" et StringUtils.EMPTY l'objet pareil
  • En utilisant StringUtils.EMPTY peut initialiser la classe StringUtils, car elle accède à son membre statique EMPTY uniquement si elle n'est pas déclarée final (le JLS est spécifique sur ce point)

Voir un réponse connexe sur l'internalisation de chaîne et sur initialisation de classe , faisant référence à JLS 12.4.1 .

11
Matthieu

Je suis étonné de voir combien de personnes sont heureuses de supposer aveuglément que "" est en effet une chaîne vide et ne contient (accidentellement?) Aucun des merveilleux caractères invisibles et sans espacement d'Unicode. Pour l'amour de tout ce qui est bon et décent, utilisez VIDE chaque fois que vous le pouvez.

9
j__m

Je n'aime pas vraiment l'utiliser, car return ""; est plus court que return StringUtils.EMPTY.

Cependant, un faux avantage de l’utiliser est que si vous tapez return " "; au lieu de return "";, vous pouvez rencontrer un comportement différent (concernant si vous testez correctement une chaîne vide ou non).

8
Romain Linsolas

Si votre classe n'utilise rien d'autre de commun, alors ce serait dommage d'avoir cette dépendance juste pour cette valeur magique.

Le concepteur des StringUtils fait un usage intensif de cette constante, et c'est la bonne chose à faire, mais cela ne signifie pas que vous devez également l'utiliser.

4
cherouvim

Je trouve StringUtils.EMPTY utile dans certains cas pour la lisibilité. En particulier avec:

  1. Opérateur ternaire par exemple.

    item.getId() != null ? item.getId() : StringUtils.EMPTY;
    
  2. Retourner une chaîne vide à partir d'une méthode, pour confirmer que oui, je voulais vraiment le faire.

En utilisant également une constante, une référence à StringUtils.EMPTY est créé. Sinon, si vous essayez d'instancier le littéral String "" chaque fois que la JVM devra déjà vérifier si elle existe déjà dans le pool de chaînes (ce qui sera probablement le cas, donc pas de surcharge de création d'instance supplémentaire). Sûrement en utilisant StringUtils.EMPTY évite d'avoir à vérifier le pool de chaînes?

1
Tom

Non, car j'ai plus à écrire. Et une chaîne vide est indépendante de la plate-forme vide (en Java).

File.separator est meilleur que "/" ou "\".

Mais fais comme tu veux. Vous ne pouvez pas obtenir une faute de frappe comme return " ";

1

Honnêtement, je ne vois pas beaucoup d’utilité non plus. Si vous souhaitez comparer avec une chaîne vide, utilisez simplement StringUtils.isNotEmpty(..)

1
Bozho