Warum ist "hat" ... nicht der Anfang einer gültigen JavaBean-Methodensignatur? [geschlossen]

8

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?

    
Niklas Rosencrantz 13.08.2012, 13:07
quelle

3 Antworten

5

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:

     
  1. ...
  2.   
  3. Auf Eigenschaften kann programmgesteuert von anderen Komponenten zugegriffen werden, die ihren getter aufrufen   und setter Methoden (siehe Abschnitt 7.1 unten).
  4.   
  5. ...
  6.   

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.

    
Thomas 13.08.2012, 13:15
quelle
1

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.

    
AlexR 13.08.2012 13:27
quelle
0

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.

    
John Smith 13.08.2012 13:15
quelle

Tags und Links