Ich weiß, dass es in Java üblich ist, "get" als Präfix für eine Accessor-Methode zu verwenden. Ich habe mich gefragt, was der Grund dafür ist. Kann ich nur vorhersagen, was es zurückgibt?
Zur Klarstellung: In einigen Java-Klassen (zB String
) kann auf eine Variable wie length zugegriffen werden, indem "length ()" statt " size()
" aufgerufen wird. Warum werden diese Methoden so geschrieben, aber andere wie " getSomeVariable()
"?
Danke für Ihre Zeit.
Edit: Gut zu sehen, ich bin nicht allein wegen der Verwirrung & amp; etwa über die Größen- und Längenvariablen
'get' Präfix (oder 'ist' für Methoden, die Booleans zurückgeben) ist ein Teil der JavaBean Spezifikation, die verwendet wird im ganzen Java, aber meistens in Ansichten im Web-UI.
Länge () und Größe () sind historische Artefakte aus vor-Javabean Zeiten; Viele UI-Entwickler hatten beklagt, dass Collection eine size()
Methode anstelle von getSize()
Weil Eigenschaften sind Substantive und Methoden sind Verben. Es ist Teil des Bean-Patterns, das gut etabliert ist und daher von jedem erwartet wird, der Ihre Klasse verwendet.
Es könnte sinnvoll sein zu sagen:
%Vor%oder ...
%Vor%aber nicht ...
%Vor%Ich meine, es macht keinen Sinn zu sagen: "Hey, Auto. Geh FuelLevel für mich." Aber um zu sagen "Hey, Auto. Geh GetFuelLevel für mich." Das ist natürlicher.
Nun, warum haben sie den Rang mit String.length () und anderen gebrochen? Das hat mich auch immer gestört.
Die get / set-Konventionen stammen aus der Java-Bean-Spezifikation . Deshalb neigen die Leute dazu, das zu benutzen.
Und die Attribute .size (), .length () und even .length von Arrays sind Beispiele für Java-Fehler, die seinen eigenen Konventionen folgen. Es gibt viel mehr, es ist "Spaß", sie zu entdecken!
Das Präfix get
ist besonders nützlich, wenn Sie auch Methoden set
, add
, remove
usw. haben. Natürlich ist es im Allgemeinen besser, eine Schnittstelle mit get
s oder voll mit set
s zu haben. Wenn fast jede Methode get
hat, wird es nur Rauschen. Also würde ich die get
für immutables und die set
für Builder löschen. Für "grundlegende" Typen, wie Sammlungen und Strings, sind diese kleinen Wörter auch laut, IMO.
Sie können Fehler in der Spezifikation sein, verbessern jedoch die Lesbarkeit. Größe und Länge ermöglichen es Ihnen, die folgende Codezeile zu lesen:
%Vor%Als ...
Während ich weniger als die Größe des Dinges ist ...
Es gibt keine echte Konvention, aber es macht es einfacher, direkt in einen Satz zu übersetzen.
Der historische Grund war, dass die JavaBean-Spezifikation festlegte, dass Accessoren für Klasseneigenschaften mit getPropertyName / setPropertyName erstellt werden sollten. Der Vorteil war, dass Sie dann die Introspection-APIs verwenden können, um die Eigenschaften eines Objekts dynamisch aufzulisten, sogar eines, das Sie zuvor nicht in Ihr Programm kompiliert hatten. Ein Beispiel dafür, wo dies nützlich wäre, ist das Erstellen einer Plug-In-Architektur, die Objekte laden muss und dem Benutzer Zugriff auf die Eigenschaften des Objekts gewährt.
Sie haben unterschiedliche Namen, um die Größe in verschiedenen Klassen abzurufen, einfach weil sie von verschiedenen Personen geschrieben wurden und es zu dieser Zeit wahrscheinlich keine Entwurfsrichtlinie gab, Klassenmethoden einheitlich zu benennen. Wenn Millionen von Codezeilen unter Verwendung dieser inkonsistenten Namen geschrieben wurden, war es zu spät, um sie zu ändern.