2010-02-22 16 views

Antwort

18

Kein

Sie das Konzept der Eigenschaften nicht in der Java-Sprache. Sie müssen Getter und Setter verwenden.

+2

Fast: Sie haben keine Unterstützung auf Sprachenebene, aber Eigenschaften sind ein gut definiertes Konzept in der Java-Beans-Spezifikation und werden über ihre Getter/Setter definiert. –

+2

Danke für das Hinzufügen, aber ich nahm an, dass wir über die Sprache Jave in dieser Frage sprachen. – stiank81

+1

Und ich stimme dieser Annahme zu. Trotzdem möchte ich vermeiden, den Eindruck zu erwecken, dass es in Java keine Eigenschaften gibt (die Plattform). Während Java (die Sprache) es nicht unterstützt, ist es in der Plattform keine unbekannte Sache. –

2

Als ich das letzte Mal überprüft habe, hat Java keine Eigenschaften unterstützt.

4

Java unterstützt keine C# -ähnlichen Eigenschaften. Sie benötigen Getter und Setter, aber seien Sie vorsichtig, dass Sie Ihrem Benutzer nicht versehentlich Zugriff auf die gekapselten Daten geben, indem Sie einen Verweis auf das Objekt zurückgeben, anstatt auf eine Kopie davon zu verweisen.

+0

Ihre Befürwortung dieser: Objekt x = something.getX(); if (x.equals (something.getX())) { // Kann nicht passieren } – brian

+0

Hmm, ich verstehe. Also sollte ich immer tiefe Kopien von Variablen machen, wenn ich von einem Getter zurückkomme? –

+2

Nein, nur wenn es nicht sicher ist, dass man es draußen wechseln kann. Die Sache ist, für ein primitives wie 'int' können Sie einfach einen Getter ohne einen Setter erstellen, um Ihre Variable zu schützen. Wenn Sie jedoch einen Referenztyp (z. B. eine Sammlung) von Ihrem Getter zurückgeben, kann der interne Zustand des Objekts außerhalb manipuliert werden (z. B. member.getFriends(). Clear()) Wenn Sie sich das nicht leisten können, geben Sie eine Kopie zurück (oder ein schreibgeschützter Wrapper). –

4

Wie die anderen gesagt, kein Java haben keine Eigenschaften per se. Die akzeptierte Methode besteht darin, Getter und Setter zu verwenden. Nebenbei bemerkt, Delphi unterstützt Eigenschaften, die C# sehr ähnlich sind.

Definitiv nichts wie AutoProperties ist in Java unterstützt. Ich kann auch keine Hinweise auf zukünftige Unterstützung finden.

0

C# -Eigenschaften ähneln den Delphi-Eigenschaften aus dem einfachen Grund, dass sie von Delphi-Eigenschaften inspiriert wurden. Mit einem der Schlüssel Leute aus Borland Delphi Team Umzug nach Microsoft und (Hilfe) Design C# hatte natürlich überhaupt nichts damit zu tun :)

Es gab einen Vorschlag (mehrere in der Tat) im letzten Jahr für das Hinzufügen von C# Stil Eigenschaften zu Java, aber diese wurden effektiv von der Gemeinschaft als bloßer syntaktischer Zucker ohne wirklichen Mehrwert abgeschossen.

+5

Ich dachte, syntaktischer Zucker war eine nette Sache .. –

+0

nicht notwendig. Viele Dinge ermöglichen nur mehr Verschleierung. tbh Ich mag eher die Eigenschaften in C#, aber ich kann sehen, warum es zu Problemen führen konnte, nicht in der Lage zu sein, im aufrufenden Code zwischen dem Zugreifen auf ein Mitglied und sein Getter/Setter zu unterscheiden. Wenn ich zum Beispiel eine abgeleitete Klasse habe, möchte ich möglicherweise den Getter/Setter umgehen und in einigen Situationen direkt auf das Klassenmitglied zugreifen, zum Beispiel in einem überlasteten Getter oder Setter oder aus Leistungsgründen. – jwenting

+2

Es scheint in vielen Fällen, dass einfache Getter und Setter die Codezeilen verdoppeln können, die Klassen wirklich benötigen. –

Verwandte Themen