Convention de nommage pour les getters/setters en Java
si j'ai le parlementaire suivante:
private int xIndex;
Comment dois-je nommer mon getter/setter:
getXindex()
setXindex(int value)
ou
getxIndex()
setxIndex(int value)
EDIT: ou
getXIndex()
setXIndex(int value);
?
Nom de votre domaine "indexX" ou quoi que ce soit, votre problème est résolu... ne pas compliquer les choses - même si
setxIndex
est la bonne façon pour les Haricots, avoir méthode nommée setxIndex
augmente le WTF facteur du code sans rien donner en retour. Si votre pilote de voiture est malade, ne pense pas que la façon de réparer la voiture, de remplacer le pilote.OriginalL'auteur Simon | 2010-06-01
Vous devez vous connecter pour publier un commentaire.
La réponse correcte est
si vous voulez qu'ils soient utilisés en tant que propriétés conformément à la section 8.8: la Capitalisation de déduire les noms de la JavaBeans spécification de l'API (par exemple, accès via ${objet.xIndex} dans une page JSP.
J'ai écrit un billet de blog à ce sujet: dertompson.com/2013/04/29/java-bean-getterssetters
Je ne pense pas que c'est correct. Section 8.8 se réfère à la capitalisation, du nom d'une propriété déduit à partir du nom de la méthode. Cette question est à poser des questions sur le processus inverse de nommage de la méthode basée sur le nom de la propriété. La javadoc de l'Inspecteur.decapitalize() indique que c'est une "méthode pour prendre une corde et de le convertir à la normale Java nom de la variable", pas le nom de la méthode comme dans ce cas.
la phrase à partir de la spécification de vous citer prend environ haut de cas. Par conséquent, il ne devrait pas s'appliquer ici.
vous devez penser “l'autre sens”: Si vous voulez faire de la lecture getXIndex la decapitalize méthode serait de regarder XIndex et décider il n'y a rien à decapitalize – on en revient donc XIndex et cette propriété n'existe pas.
OriginalL'auteur Thomas Einwaller
Conformément à JavaBeans spécification de l'API à partir de 1997
il devrait être comme Thomas Einwaller décrit.
C'est malheureux, getx et setx ne sont pas des mots, ce qui pour le cas rare où le code généré par l'Ide, aussi
reçoit un avertissement de la part de l'Ide. Ainsi, alors que ceci est conforme à la spécification Ejb, il viole la convention pour
la dénomination d'une méthode.
Dans les rares cas où ce serait de former un mot ou d'un sigle, il serait disinformative, par exemple, la méthode
setiMessage
plusprobablement n'a rien à voir avec SETI.
À l'aide de la seule mesure valide de la qualité du code (WTFs par minute),
J'évalue que ce qui est mauvais code.
Tout se résume à cette phrase de la spécification Ejb:
Exactement ce genre d'utilisation de tous les majuscules des noms de cette référence est claire pour moi. Les noms de champ devrait, selon
convention, camelcase. Il semble
pour moi que nous générons les noms de méthodes non conventionnelles pour soutenir non conventionnelles noms de champ tel que décidé par un
20 ans de document.
Il convient également de noter que, même si il semble être un soutien massif de la JavaBeans spécification des outils,
il n'est pas exclusivement utilisé. Par exemple. Kotlin ne reconnaîtra pas
xIndex
comme une propriété dans l'exemple ci-dessus. À l'inverse, l'Kotlin propriété
var xIndex = 0
entraînera dans les méthodes de JavagetXIndex
etsetXIndex
. Ce qui semble être un bugselon le JetBrains soutien, mais je ne vois pas comment ils peuvent résoudre les que sans faire une modification de rupture.
Certains outils qui prend en charge la spécification Ejb n'a pas toujours fait, par exemple, Jackson
et Swagger Générateur De Code ont été patché pour se conformer à elle.
Même si IntelliJ générer les accesseurs en fonction de la spécification Ejb, le exemple
dans la documentation diffère. Probablement parce que les gens ne savent pas à propos de la norme et, naturellement, préfère la
méthode normale convention de nommage.
Alors, quand devrions-nous suivre les JavaBeans cahier des charges? Lorsque les noms de propriété doit être déduit par les accesseurs par les outils qui
s'appuyer sur cette norme, on peut vouloir utiliser. Par exemple, Jackson va s'appuyer
sur la propriété
xIndex
accessibles pargetxIndex
etsetxIndex
méthodes que si nous utilisons les annotations.Quand doit-on éviter cette norme? Par ma recommandation: Lorsque le code doit être lu et compris par les humains.
En raison de ne pas utiliser la bonne chameau boîtier lors du nommage des méthodes est disinformative.
Si j'aurais à ma façon, nous aurions utilisation normale des conventions de nommage, c'est à dire
getXIndex
etsetXIndex
. Mais, compte tenu de l'étatdes choses, la meilleure solution que je vois est suggéré par @vaxquis:
Des commentaires concernant la spécification Ejb doit, selon la spécification elle-même, être envoyé à
[email protected].
OriginalL'auteur Love
Devrait être:
pas correct, ces méthodes ne sont pas conformes à la Java Bean conventions de nommage
Cette réponse n'est pas correcte, l'une de @ThomasEinwaller est, parce que c'est clairement spécifié, et pas quelque chose que nous avons besoin de discuter 🙂
la réponse de Thomas est la bonne.
Ceci est incorrect
OriginalL'auteur Samuel Yung
Méthodes doivent être des verbes, en majuscules et en minuscules avec la première lettre en minuscules avec la première lettre de chaque mot en majuscule.
OriginalL'auteur ayush
Vous devriez utiliser l'Introspection.decapitalize du paquet java.les haricots et vous n'avez pas de problème dans la mesure où il est compatible avec java règles.
OriginalL'auteur Hervé Darritchon
De l'ide Eclipse génère automatiquement les setters et getters:
Qui est conforme à la spécification de l'API java beans.
OriginalL'auteur Bipin Thakur
Je pense que
getXindex()
est le meilleur moyen. La lecture doit commencer avec 'get', suivi par le nom du membre, avec sa première lettre en majuscule. Aussi les dernières conventions j'ai entendu parler de, dire que nous devrions éviter de multiples capitale des lettres l'une après l'autre. Par exemplegetHTMLtooltip
est faux. il devrait êtregetHtmlTooltip
à la place. En outre, vous devriez essayer de faire tout votre membresfinal
et il ne devrait pas être nécessaire de setters, depuis la classe sera immuable 😉re immuable: tout cela est évidemment souhaitable, non pas toutes les classes peuvent être faits immuables. mais bien sûr: les setters ne devraient être présents en cas de besoin. @Simon: la principale raison est la sécurité des threads. si une classe est immuable, pas de problèmes de modifications simultanées à travers différents threads peuvent toujours survenir
Désolé, je n'ai pas lu le "javabeans" tag. Les haricots architecture suppose que les accesseurs et mutateurs et ne sont pas en faveur de l'immutabilité
Downvote, selon le cas mentionné dans la question est spécifié dans la spécification, voir les autres réponses.
OriginalL'auteur m_pGladiator