Die Signatur der JavaBeans-Methoden muss bestimmten Konventionen wie set ... / get ... und so folgen. Sie haben eine Konvention für is ... zum Beispiel isEven()
könnte eine Methode für eine Integer-Klasse sein, um einen booleschen Wert zu testen. Aber dann frage ich mich, warum nicht ... ist auch eine legale Kennung, da es für mich Sinn macht zu testen, was etwas hat z. hasCar()
für eine Personenklasse oder ähnlich.
Verstehst du meine Frage? Was denkst du?
Nun, die allgemeine Konvention lautet get...
und set...
zu verwenden und somit ist is...
nur eine Ausnahme für Booleans. Für is...
ist die Konvention einfach: Sie müssen einen booleschen Wert zurückgeben, können den Getter überspringen und der entsprechende Setter nimmt auch einen booleschen Parameter.
Eine Konvention für has...
wäre schwieriger: has...
würde einen booleschen Wert zurückliefern, aber Sie würden immer noch einen Getter und Setter benötigen, die sich mit verschiedenen Typen befassen. Daher ist has...
kein Ersatz für get...
im Gegensatz zu is...
und da dieser Teil der JavaBeans-Konvention normalerweise nur für Getter und Setter steht, passt has...
nicht hinein.
Aus der JavaBeans-Spezifikation:
Eigenschaften sind diskrete, benannte Attribute eines Java Beans ...
Eigenschaften werden auf verschiedene Arten angezeigt:
- ...
- Auf Eigenschaften kann programmgesteuert von anderen Komponenten zugegriffen werden, die ihren getter aufrufen und setter Methoden (siehe Abschnitt 7.1 unten).
- ...
Jede Eigenschaft, auf die mit has...
zugegriffen wird, ist nicht persistent und kann auch nicht mit der Getter-Methode aufgerufen werden.
Beispiel: Wenn eine Person eine car
-Eigenschaft hat, erwarten Sie einen getCar()
-Accessor. hasCar()
wäre kein Accessor, da die abgeleitete Eigenschaft hasCar
einen Accessor namens getHasCar()
oder isHasCar()
benötigt. Wenn has
ein Accessor-Präfix wäre, würde die Eigenschaft den in Konflikt stehenden Namen car
haben.
get/set
und is/set
für den booleschen Typ ist nur die Konvention. Ich stimme zu, dass es manchmal besser ist, Getter hasSomething
aufzurufen. Zum Beispiel hasChildren()
. Aber gehen wir vorwärts und sagen, dass es in Ordnung ist, die Methode canWrite()
oder willFly()
oder providesResult()
usw. aufzurufen. Und Sie können solche Namen verwenden, aber diese Namen folgen nicht der Java-Konvention und werden daher nicht als Getter erkannt Java-Frameworks.
Java Bohnen wurden vor vielen Jahren erfunden. Wahrscheinlich ist es keine schlechte Idee, die Annotationen @Setter
und @Getter
zu definieren. Wenn diese Annotationen üblich werden, können sie von allen Java-Frameworks unterstützt werden und Programmierer können Getter wie gewünscht aufrufen, aber sie mit der Annotation @Getter
markieren. Solche Anmerkungen werden jedoch jetzt nicht unterstützt. Daher sollten Sie nur den bestehenden Namenskonventionen folgen.
Ich denke nicht, dass dies eine schlechte Frage ist! Ich habe auch darüber nachgedacht und festgestellt, dass die Leute es so verwenden, wie du es nutzen willst . Es ist nur so, dass die meisten Bibliotheken (wie die, die Sie wahrscheinlich verwenden) dies nicht tun.
Ich stimme zu, dass es für boolesche Eigenschaften gültig sein sollte.