In Java werden standardmäßig Getter und Setter für Boolesche Felder isField()
und verwendet setField()
. Das funktioniert völlig in Ordnung , mit Feldnamen , die Adjektive wie active
, visible
, closed
usw.
Aber wie kann ich ein Feld benennen, das die Bedeutung eines Verbs hat haveChildren
? Fügen Sie dem Verb ( ) "_ing" hinzu , vielleicht?havingChildren
Zur Verdeutlichung habe ich keine Kontrolle über die Methodennamen (Getter und Setter), da diese von der IDE automatisch generiert werden. Also, was ich brauche, ist ein passender Feldname, damit es Sinn ergibt, wenn die IDE einen Getter dafür generiert. hasChildren
Ein perfekter Feldname ist beispielsweise, aber wenn die IDE den Getter für das Feld generiert, ist dies der Fall isHasChildren
. Wie löse ich das?
parent
würde es funktionieren.Antworten:
Kurze Antwort:
Lange Antwort:
haveChildren()
sollte benannt werdenhasChildren()
.Ich sehe es auch nicht
hasChildren()
als notwendig an, der Getter für ein Mitglied der Booleschen Klasse zu sein. Ich schätze, eine solche Methode würde herausfinden, ob ein Mitglied vom TypCollection
leer ist oder nicht .Der Standardname, den eine IDE für generierte Getter und Setter verwendet, ist kein in Stein gemeißeltes Gesetz.
Ein weiterer Punkt: Schnittstellen haben Namen für noch zu implementierende Methoden.
Wenn Methodennamen verwendet würden, um die interne Implementierung widerzuspiegeln, wie könnte jemand jemals eine Schnittstelle entwerfen? Schnittstellen haben weder eine Implementierung, noch wissen sie vorher, was die Implementierer unter der Haube tun werden.
Nehmen wir zum Beispiel die
Iterator
Oberfläche in Java.Iterator
Selbst wenn Sie ein boolesches Mitglied namens implementieren , müssennext
Sie es nichthasNext()
inisNext()
oder umbenennenisHavingNext()
. Das ist ein Implementierungsdetail. Tatsächlich habe ich implementiert,Iterator
und was ich tue, ist, ein Mitglied des Typs zu haben, von dem meine Klasse eine Liste mit dem Namen hatnext
(kein Boolescher Wert ).hasNext()
dann kehrt zurücknext!=null
.Siehe dazu auch:
Beachten Sie, dass dies
isDead()
kein normaler Getter ist.Nutzen Sie die Produktivitätstools von IDEs für das, was sie sind.
quelle
Ich würde vorschlagen, das Feld in
parent
umzubenennen , damit der GetterisParent
und der Setter sein werdensetParent
.Sie können auch
childPresent
nach dem Variablennamen undisChildPresent
undsetChildPresent
als Getter und Setter suchen .quelle
parent
Feld habe, in dem der Verweis auf das übergeordnete Objekt gespeichert werden kann. Ich denke, was ich brauche, ist eine allgemeine Regel, um alle Verben in Adjektive für boolesche Felder umzuwandeln.Sie könnten
does
vor dem Verb setzen. WiedoesHaveChildren
in Ihrem Beispiel, das Sie angegeben haben. Oder vielleichtshouldHaveChildren
abhängig vom Kontext.quelle
isSomething
ist ein Teil dieser Spezifikation, und es werden viele Annahmen getroffen, die dem Guten oder Schlechten entgegenwirken und diedoesSomething
Dinge auf nicht so offensichtliche Weise brechen und zu Fehlern führen.Die Frage ist völlig vernünftig. Manchmal reicht es nicht aus, die automatisch generierte Methode umzubenennen. Beispiel: Von JSF-verwalteten Beans wird erwartet, dass sie
isXyz()
die Getter-Methode einerboolean xyz
Eigenschaft haben.Ich stimme BlackPanther zu, der vorschlägt, das Feld in umzubenennen
parent
undisParent
als Methodennamen zu verwenden. Gemäß dem Prinzip des Ausblenden von Informationen ist die Lesbarkeit der Get- und Setter-Methoden wichtiger als die der Attribute.quelle