Question

si je le député suivant:

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);

Était-ce utile?

La solution

La bonne réponse est

getxIndex()
setxIndex(int value)

si vous voulez qu'ils soient utilisés comme biens conformément à la section 8.8: Immobilisation des noms inférées JavaBeans spécification API (par exemple les accès par $ {objet. indiceN} dans une JSP.

Autres conseils

Conformément à JavaBeans spécification API de 1997 il devrait être comme décrit Thomas Einwaller.

private int xIndex;
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }

Ceci est regrettable, GetX et setx ne sont pas des mots, ce qui pour les rares cas ont été le code généré par IntelliJ aussi reçoit un avertissement par IntelliJ. Ainsi, alors que ce conforme à la spécification JavaBeans, elle viole la Convention nommer un procédé . Dans les rares cas où cela formerait un mot ou un acronyme, il serait disinformative, par exemple le plus methodsetiMessage a probablement rien à voir avec SETI . En utilisant la seule mesure valable de qualité du code (WTFs par minute), J'évalue que ce qui est mauvais code .

Tout se résume à cette phrase de la spécification JavaBeans:

  

Cependant, pour soutenir l'utilisation occasionnelle de tous les noms en majuscules, nous vérifions si les deux premiers caractères du nom sont     majuscules et le cas échéant le laisser seul.

Exactement ce type d'utilisation de tous les noms en majuscules cela fait référence à ne sait pas pour moi. Les noms de champs doivent, selon , être chameau tubé. Il semble pour moi que nous générons les noms de méthodes non conventionnelles afin de soutenir les noms de champs non conventionnels comme décidé par un 20+ ans document.

Il convient également de noter que, même si cela semble être un soutien écrasant pour la spécification JavaBeans dans les outils, il est pas exclusivement utilisé. Par exemple. Kotlin ne reconnaîtra pas xIndex comme une propriété dans l'exemple ci-dessus. Inversement, la Kotlin propriété var xIndex = 0 se traduira par des méthodes Java getXIndex et setXIndex. Cela semble être un bug selon les JetBrains soutiens, mais je ne vois pas comment ils peuvent résoudre ce problème sans une modification importante.

Certains outils qui prend en charge la spécification JavaBeans n'a pas toujours fait, par exemple Jackson et Swagger Code Generator ont été patché pour s'y conformer. Même si IntelliJ générer accesseurs selon la spécification JavaBeans, exemple dans la documentation diffère. Probablement parce que les gens ne connaissent pas la norme et préfère naturellement convention de nommage de la méthode normale.

quand devons-nous suivre la spécification JavaBeans? Lorsque les noms de propriété doivent être inférée accesseurs par des outils appuyer sur cette norme, nous pourrions l'utiliser. Par exemple, Jackson compteront sur la xIndex propriété en cours d'accès par des méthodes de getxIndex et setxIndex à moins d'utiliser des annotations.

Quand devons-nous éviter cette norme Par ma recommandation: Lorsque le code doit être lu et compris par les humains. En raison de ne pas utiliser boîtier de chameau approprié lorsque les méthodes de désignation est disinformative.

Si je l'aurais mon chemin, nous utiliserions les conventions de nommage normales, à savoir getXIndex et setXIndex. Mais, étant donné l'état des choses, la meilleure solution que je vois est suggéré par @vaxquis:

  

Nomvotre champ « indexX » ou tout autre chose, votre problème est résolu ... faire des choses pas trop compliquer - même si setxIndex     est la bonne façon pour les haricots, la méthode ayant appelé setxIndex augmente le facteur de WTF du code sans vous donner     quoi que ce soit en retour.

Tous les commentaires concernant la spécification JavaBeans devrait, selon la spécification elle-même, être envoyé à java-beans@java.sun.com.

Devrait être:

getXIndex()
setXIndex(final int xIndex)

Les méthodes doivent être des verbes, en cas mélangé avec la première lettre en minuscule, avec la première lettre de chaque mot interne en majuscules.

Vous devez utiliser Introspector.decapitalize de java.beans de package et vous avez aucun problème beacause il est conforme aux règles de java.

ide Eclipse génère automatiquement setters et getters comme:

getxIndex()
setxIndex(int value)

Ce qui est selon la Java Beans spécification API.

Je pense que getXindex() est la meilleure façon. Le getter doit commencer par « obtenir », suivi du nom de membre, avec sa première lettre en majuscule. De plus, les dernières conventions j'entendu parler, disent que nous devrions éviter plusieurs lettres majuscules un après l'autre. Par exemple getHTMLtooltip est erroné. il devrait être getHtmlTooltip à la place. Aussi, vous devriez essayer de faire tous vos membres final et il ne devrait pas être nécessaire de setters, puisque la classe sera immuable;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top