188 votes

Enum Java - pourquoi utiliser toString au lieu du nom

Si vous regardez dans l'api enum la méthode name() il est dit que :

Renvoie le nom de cette constante d'énumération, exactement comme indiqué dans sa déclaration d'énumération. La plupart des programmeurs devraient utiliser la méthode toString de préférence à celle-ci, car la méthode toString peut renvoyer un nom plus convivial. Cette méthode est conçue principalement pour être utilisée dans des situations spécialisées où l'exactitude dépend de l'obtention du nom exact, qui ne variera pas d'une version à l'autre.

Pourquoi est-il préférable d'utiliser toString() ? Je veux dire que toString peut être surchargé lorsque name() est déjà final. Donc si vous utilisez toString et que quelqu'un le surcharge pour renvoyer une valeur codée en dur, toute votre application est en panne... De plus, si vous regardez dans les sources, la méthode toString() renvoie exactement et uniquement le nom. C'est la même chose.

225voto

assylias Points 102015

Cela dépend vraiment de ce que vous voulez faire avec la valeur retournée :

  • Si vous avez besoin d'obtenir le nom exact utilisé pour déclarer la constante de l'enum, vous devez utiliser name() comme toString a pu être annulé
  • Si vous voulez imprimer la constante de l'enum d'une manière conviviale, vous devriez utiliser toString qui peut avoir été remplacée (ou non !).

Lorsque je pense que cela peut prêter à confusion, je donne une réponse plus spécifique. getXXX par exemple :

public enum Fields {
    LAST_NAME("Last Name"),
    FIRST_NAME("First Name");

    //constructor etc...

    public String getFieldDescription() {
        return fieldDescription;
    }
}

60voto

dystroy Points 145126

Utilisez name() lorsque vous souhaitez effectuer une comparaison ou utiliser la valeur codée en dur pour un usage interne dans votre code.

Utilisez toString() lorsque vous voulez présenter des informations à un utilisateur (y compris un développeur qui regarde un journal). Ne comptez jamais dans votre code sur toString() donnant une valeur spécifique. Ne le testez jamais par rapport à une chaîne de caractères spécifique. Si votre code se casse lorsque quelqu'un modifie correctement le toString() retour, alors il était déjà cassé.

Extrait de la javadoc (c'est moi qui souligne) :

Renvoie une représentation sous forme de chaîne de caractères de l'objet. En général, la méthode toString renvoie une chaîne de caractères qui "représente textuellement" ce objet. Le résultat doit être une représentation concise mais informative. qui est facile pour une personne à lire . Il est recommandé que toutes les sous-classes surchargent cette méthode.

29voto

AlexR Points 60796

name() est une méthode "intégrée" de enum . Il est définitif et vous ne pouvez pas modifier sa mise en œuvre. Elle renvoie le nom de la constante de l'enum tel qu'il est écrit, c'est-à-dire en majuscules, sans espaces, etc.

Comparez MOBILE_PHONE_NUMBER et Mobile phone number . Quelle version est la plus lisible ? Je crois que c'est la deuxième. Voici la différence : name() renvoie à MOBILE_PHONE_NUMBER , toString() renvoie à Mobile phone number .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X