En Java, par convention, getter et setter pour les champs booléens seront isField()
et setField()
. Cela fonctionne parfaitement bien avec les noms de champs qui sont des adjectifs comme active
, visible
, closed
, etc.
Mais comment nommer un champ qui a la signification d'un verbe, comme haveChildren
? Ajoutez «_ing» au verbe ( ), peut-être?havingChildren
Pour clarifier, je n'ai pas le contrôle des noms de méthode (getter et setter) car ils sont générés automatiquement par l'IDE. Donc, ce dont j'ai besoin, c'est d'un nom de champ approprié pour que lorsque l'IDE génère un getter pour cela, il ait un sens. Par exemple, hasChildren
est un nom de champ parfait, mais lorsque l'EDI génère le getter pour le champ, ce serait isHasChildren
. Comment résoudre ce problème?
parent
cela fonctionnerait.Réponses:
Réponse courte:
Longue réponse:
haveChildren()
doit être nomméhasChildren()
.De plus, je ne vois pas
hasChildren()
nécessairement être le getter pour un membre de la classe booléenne. Je suppose qu'une telle méthode permettrait de savoir si un membre de typeCollection
est vide ou non .Le nom par défaut qu'un IDE donne aux getters et setters générés ne sont pas censés être une loi gravée dans le marbre.
Autre point: les interfaces ont des noms pour les méthodes encore à implémenter.
Si les noms de méthode étaient supposés refléter l'implémentation interne, comment quelqu'un pourrait-il jamais concevoir une interface? Les interfaces n'ont pas d'implémentation et ne savent pas à l'avance ce que les implémentateurs feront sous le capot.
Prenons par exemple l'
Iterator
interface en Java.Lorsque vous implémentez
Iterator
, même si vous avez un membre booléen nomménext
, vous n'êtes pas censé arriver à renommerhasNext()
àisNext()
ouisHavingNext()
. C'est un détail d'implémentation. En fait, j'ai implémentéIterator
et ce que je fais est d'avoir un membre du type de ce que ma classe a une liste, nomménext
(pas un booléen).hasNext()
revient ensuitenext!=null
.Voir aussi ceci:
Notez que ce
isDead()
n'est pas un getter normal.Prenez les outils de productivité des IDE pour ce qu'ils sont.
la source
Je suggère de renommer le champ pour
parent
que le getter soitisParent
et le setter le soitsetParent
.Vous pouvez également essayer
childPresent
pour le nom de variable etisChildPresent
etsetChildPresent
comme getter et setter.la source
parent
champ pour contenir la référence à l'objet parent. Je pense que j'ai besoin d'une règle générale pour convertir tous les verbes en adjectifs pour les champs booléens.Vous pourriez mettre
does
avant le verbe. CommedoesHaveChildren
dans votre exemple que vous avez fourni. Ou peut-êtreshouldHaveChildren
selon le contexte.la source
isSomething
fait partie de cette spécification et de nombreuses hypothèses sont faites autour d'elle, pour le meilleur ou pour le pire, aller à l'encontre de cela avecdoesSomething
peut casser les choses de manière moins évidente, conduisant à des bugs.La question est parfaitement raisonnable. Parfois, renommer la méthode générée automatiquement n'est pas suffisant. Exemple: les beans gérés JSF devraient avoir
isXyz()
comme méthode getter d'uneboolean xyz
propriété.Je suis d'accord avec BlackPanther qui suggère de renommer le champ
parent
et de l'utiliserisParent
comme nom de méthode. Selon le principe de masquage des informations, la lisibilité des méthodes getter et setter est plus importante que celle de l'attribut.la source