(Nein) Eigenschaften in Java?
So, ich habe absichtlich gehalten, mir ein Java-n00b, bis vor kurzem, und mein Erster richtiger Exposition bewirkte einen geringfügigen Schock: in Java nicht haben C# - style properties!
Ok, kann ich mit Leben. Aber ich kann auch schwören, dass ich gesehen habe-Eigenschaft getter - /setter-code in Java in einer Codebasis, aber ich kann mich nicht erinnern, wo. Wie wurde das erreicht? Gibt es eine Sprache, die Erweiterung? Ist es mit NetBeans oder so?
InformationsquelleAutor der Frage Ishmaeel | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine "standard" - Muster für Getter und setter in Java, genannt Bean-Eigenschaften. Im Grunde ist jede Methode, beginnend mit
get
, die keine Argumente und gibt einen Wert zurück, ist eine Eigenschaft getter für eine Eigenschaft mit dem Namen, wie der rest des namens der Methode (mit einem Anfangsbuchstaben kleingeschrieben). Ebenfallsset
schafft ein setter eine void-Methode mit einem einzigen argument.Beispiel:
Meisten Java IDEs generieren diese Methoden für Sie, wenn Sie Sie bitten, Ihnen (in Eclipse ist es so einfach wie das bewegen des Cursors auf ein Feld und drücken Sie Strg-1, dann die option auswählen aus der Liste).
Für was es Wert ist, für eine bessere Lesbarkeit können Sie tatsächlich nutzen
is
undhas
im Ortget
für boolean-Typ-Eigenschaften zu, wie in:InformationsquelleAutor der Antwort Calum
Ich bin überrascht, dass niemand erwähnt Projekt lombok
Ja, es gibt momentan keine Eigenschaften in java. Es gibt einige andere fehlende features.
Aber zum Glück haben wir Projekt lombok, der versucht, die situation zu verbessern. Es wird auch immer mehr und mehr populär jeden Tag.
So, wenn Sie mit lombok:
Dieser code wird generiert
getAwesomeInteger
undsetAwesomeInteger
als gut. So ist es Recht ähnlich C# automatisch implementierte Eigenschaften.Können Sie mehr info über lombok Getter und setter hier.
Sie sollten auf jeden Fall Auschecken andere Funktionen als gut.
Meine Favoriten sind:
Lombok ist gut integriert mit IDEs, daher wird es zeigen generierten Methoden, wie wenn Sie existierten (Anregungen, Klasse Inhalt, gehe zu Deklaration und refactoring).
Das einzige problem mit lombok ist, dass andere Programmierer vielleicht nicht wissen. Sie können immer delombok den code, aber das ist eher ein workaround als eine Lösung.
InformationsquelleAutor der Antwort Aleks-Daniel Jakimenko-A.
Die bean-Konvention ist, schreiben Sie code wie diesen:
In einige andere Sprachen auf der JVM, z.B., Groovy, erhalten Sie überschreibbaren Eigenschaften ähnlich zu C#, z.B.,
auf die zugegriffen wird, mit einem einfachen
.foo
werden und nutzt Standard -getFoo
undsetFoo
Implementierungen, die Sie außer Kraft setzen können, wie es notwendig ist.InformationsquelleAutor der Antwort Hank Gay
Dies ist so etwas wie C# Eigenschaften. Es ist http://projectlombok.org/
InformationsquelleAutor der Antwort dantuch
"Java-Property Support" vorgeschlagen wurde, für Java 7, aber nicht in der Sprache.
Sehen http://tech.puredanger.com/java7#property weitere links und info, wenn interessiert.
InformationsquelleAutor der Antwort Cheekysoft
Meisten IDEs für Java wird automatisch getter-und setter-code für Sie, wenn Sie wollen. Es gibt eine Reihe von verschiedenen Konventionen, und eine IDE wie Eclipse wird Ihnen erlauben, zu wählen, welche Sie verwenden möchten, und lassen Sie sogar Ihre eigene definieren.
Eclipse enthält sogar automatisiertes refactoring, das Ihnen erlaubt, zu wickeln, eine Eigenschaft, die bis in eine getter-und setter-und es wird ändern Sie den code, der greift auf die Eigenschaft direkt zu machen, verwenden Sie die getter und/oder setter.
Natürlich kann Eclipse nur code ändern, die es kennt - alle externen Abhängigkeiten, die Sie haben könnten, werden gebrochen durch eine solche Umgestaltung.
InformationsquelleAutor der Antwort Bill Michell
Vom Jeffrey Richter Buch CLR via C#": (ich denke, diese könnten die Gründe sein, warum die Eigenschaften sind noch nicht Hinzugefügt, JAVA)
out
oderref
parameter an eine Methode; ein Feld kann.sofort. Ein gemeinsamer Grund für die Verwendung von Eigenschaften ist die Durchführung von thread-Synchronisation,
die können aufhören, den thread für immer, und deshalb, eine Eigenschaft, die nicht sein sollten
verwendet, wenn die thread-Synchronisation notwendig ist. In dieser situation, ist die bevorzugte Methode.
Auch, wenn Ihre Klasse kann aus der Ferne zugegriffen werden (zum Beispiel Ihrer Klasse ist abgeleitet von
System.MarshalByRefObject
), aufrufen der Eigenschaft Methode wird sehr langsam sein, unddaher ist die bevorzugte Methode, um eine Eigenschaft. Meiner Meinung nach, Klassen, abgeleitet von
MarshalByRefObject
sollten nie Eigenschaften.Zeit; ein Feld gibt den gleichen Wert jedes mal. Die
System.DateTime
Klasse hat eine readonlyNow
Eigenschaft gibt das aktuelle Datum und die Uhrzeit. Jedes mal, wenn Sie abgefragt werdenEigentum, wird es wieder einen anderen Wert. Das ist ein Fehler, und Microsoft wünscht sich, dass
Sie konnte dann die Klasse, indem Sie Nun eine Methode anstatt einer Immobilie.
Environment
'sTickCount
Eigenschaft ist ein weiteres Beispiel für diesen Fehler.Worte, die ein Benutzer von einer Art sollte in der Lage sein, um verschiedene Eigenschaften definiert durch eine Typ in
jede Ordnung, die er oder Sie wählt, ohne es zu bemerken das unterschiedliche Verhalten in der Art.
das ist eigentlich nicht Teil der den Zustand des Objekts, so ändern Sie das zurückgegebene Objekt hat keine
Auswirkungen auf das ursprüngliche Objekt; Abfrage ein Feld gibt immer eine Referenz auf ein Objekt
das ist garantiert ein Teil des ursprünglichen Objekts. Die Arbeit mit einer Eigenschaft
gibt eine Kopie kann sehr verwirrend sein für die Entwickler, und dieses Merkmal ist Häufig
nicht dokumentiert werden.
InformationsquelleAutor der Antwort th1rdey3
Können Sie nicht brauchen, für "get" und "set" - Präfix, um es so Aussehen mehr wie Eigenschaften, Sie können es tun, wie dieses:
InformationsquelleAutor der Antwort LEM Adane
Meine Java-Erfahrung ist nicht so hoch, so jemand fühlen Sie sich frei, mich zu korrigieren. Aber AFAIK, der Allgemeinen Konvention zu schreiben, zwei Methoden, etwa so:
InformationsquelleAutor der Antwort Mark Embling
Wenn Sie mit eclipse dann hat es die Funktionen zum automatischen generieren von getter und setter Methode für den internen Parametern, kann es ein nützliches und zeitsparendes tool.
InformationsquelleAutor der Antwort TK.
Ich bin einfach nur loslassen Java 5/6 Anmerkungen und einer annotation-Prozessor zu helfen.
Check-out http://code.google.com/p/javadude/wiki/Annotations
Die Dokumentation ist ein bisschen Licht, aber quickref sollte auf die Idee kommen über.
Grundsätzlich erzeugt eine Oberklasse mit den get - /Set-Methoden (und viele andere code generation options).
Einer Beispiel-Klasse Aussehen könnte
Gibt es viele weitere Muster zur Verfügung, und es gibt keine runtime-Abhängigkeiten in den generierten code.
Senden Sie mir eine E-Mail, wenn Sie probieren Sie es aus und finden es nützlich!
-- Scott
InformationsquelleAutor der Antwort Scott Stanchfield
Es ist keine Eigenschaft Schlüsselwort in java (wie Sie finden konnte, es in C#) die nächste Möglichkeit zu haben, 1 Wort getter/setter wie in C++:
InformationsquelleAutor der Antwort Patrick PIGNOL