Frage

Zwei Semester vor, ich hatte einen Professor, der sagte:

  

Einige von euch haben immer gesagt, umfassen Setter und Getter-Methoden für alle privaten Instanzvariablen. Ich sage, dass diese Information Hiding bricht, und führt oft in Systemen, in denen Invarianten kann nicht erzwungen werden.

Nun, das klingt richtig für mich. Aber schließt nicht jene Arten von Setter / Getter ein Kernteil Java Beans zu schaffen? Wenn ja warum? Wenn nicht, was bin ich Missverständnis über Java Beans?

War es hilfreich?

Lösung

Getter und Setter sind nicht in einer Java-Bean-Klasse erforderlich. Alles, was erforderlich ist, dass die Klasse öffentlich sein muss, muss es ein öffentliches kein Argument Konstruktor und es muss Serializable implementieren. Um jedoch für Variablen automatisch entdeckt zu werden, wenn Ihr Bean verwendet wird Du Getter und Setter nach einer Standardnamenskonvention zur Verfügung stellen muss (getVarname, setVarname ...).

Auf jeden Fall möchten Sie von außen sichtbar nur die Variablen machen, die ein Geschäft außerhalb Ihrer Klasse gesehen zu werden.

Andere Tipps

Sie möchten können Sie unter Warum Getter und Setter Methoden sind böse :

  

Sie könnte einwenden, indem er sagte: „Aber was   über Java Beans?“Was ist mit ihnen? Sie   sicherlich kann Java Beans bauen, ohne   Getter und Setter. Das   BeanCustomizer, BeanInfo und   BeanDescriptor Klassen existieren für   genau diesen Zweck. die JavaBean   spec Designer warf die Getter / Setter   Idiom in das Bild, weil sie   dachte, es wäre ein einfacher Weg sein,   schnell eine bohnen etwas machen können Sie   tun, während Sie lernen, wie man es tun   richtig. Leider niemand getan.

     

Accessoren wurde nur als eine Möglichkeit geschaffen   zu markieren, eine bestimmte Eigenschaften so   UI-Builder-Programm oder ein gleichwertiges könnte   identifizieren sie. Sie sollen nicht   nennen diese Methoden selbst. Sie   gibt es für ein automatisiertes Tool zu verwenden.   Dieses Tool verwendet die APIs Selbstbeobachtung   in der Class Klasse, die Methoden zu finden   und extrapolieren die Existenz   gewisse Eigenschaften von dem Verfahren   Name. In der Praxis wird diese   Idiom Selbstbeobachtung Basis hat nicht   ausgearbeitet. Es ist der Code in beträchtlichem Ausmaß gemacht   zu kompliziert und verfahren.   Programmierer, die keine Daten verstehen   Abstraktion nennen tatsächlich die   Accessoren, und als Folge davon, die   Code ist weniger wartbar.

Es ist in der Regel recht einfach, man Setter / Getter für die Variablen setzen Sie nach außen sichtbar machen müssen, und Sie müssen nicht Setter / Getter für Variablen niemand sonst jedes Unternehmen haben zu wissen, über belichten.

Ihr Professor ist richtig. Sie wollen nicht blind Getter und Setter für alle Instanzvariablen erstellen. Sie wollen, dass sie schaffen, wo sie benötigt werden.

Wenn Sie eine BankAccount-Klasse mit einer balance Instanzvariable haben, Erstellen von Getter und Setter für es sinnvoll, wenn Sie in der Lage sein wollen, das Gleichgewicht zu überprüfen und einzustellen.

Auch hier gibt es Informationen versteckt - in Form der Umsetzung der Verkapselung. Der Getter „double getBalance()“ könnte einfach den Wert des zugrunde liegenden Instanz-Variable zurück, wenn es dich um eine double ist, oder es könnte einen Wert von einem BigDecimal abgeleitet zurückkehren, wenn, dass die Umsetzung Wahl für die Variable ist, oder es könnte ein Remote-Web anrufen Service und das Ergebnis zurück. So war der Getter / Setter erlaubt nach wie vor für die Umsetzung zu variieren und somit nicht Verkapselung nicht verletzt (und durch die Erweiterung, auch nicht Java Beans).

Welche Java Beans für Sie tun, ist eine Schnittstelle definieren (getXXX(), setXXX()) für das Abrufen und Einstellung „Eigenschaften“, Attribute einer Klasse, die Benutzer in der Regel prüfen oder zu ändern möchte. Wenn Ihre Klasse Informationen hat, die nicht als „Eigentum“ betrachtet wird, gibt es keine Notwendigkeit, sie zu entlarven. Zum Beispiel, sagen wir mal, die BankAccount Klasse eine Instanz Variable für die Validierung von Entnahmen hat. Wenn die Client-Zugriff nicht diese benötigen oder ändern, gibt es keinen Punkt in einen Getter oder Setter für sie zu schaffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top