Frage

Ich schreibe a equals(Object obj) Funktion für eine Klasse. Ich sehe, dass es möglich ist, auf die privaten Felder von zuzugreifen obj vom Anrufer. Anstatt einen Getter zu verwenden:

Odp other = (Odp) obj;
if (! other.getCollection().contains(ftw)) {

}

Ich kann einfach direkt auf das Feld zugreifen:

Odp other = (Odp) obj;
if (! other.collection.contains(ftw)) {

}

Ist diese schlechte Praxis?

War es hilfreich?

Lösung

Nein, ist es nicht. Der Grund, warum private Variablen und Methoden nicht aus anderen Klassen zugegriffen werden können zu einem Wert, den es nie haben soll).

Wenn Sie private Variablen anderer Objekte verwenden, die nichts schaden. Wenn Sie die Interna Ihrer Klasse umstrukturieren, müssten Sie den Code trotzdem in der Klasse ändern.

Andere Tipps

Ich neige dazu, immer Getter zu verwenden, weil ein Getter manchmal nicht nur "zurückkehren (foo)" ist. Manchmal initialisieren sie Dinge, wenn sie null sind, oder haben ein Debug -Anmelden in sich oder validieren den aktuellen Zustand in irgendeiner Weise. Es ist konsistenter.

Ich denke nicht, dass dies eine schlechte Praxis ist, sondern ein Merkmal der Sprache. Es ermöglicht Ihnen nicht nur das Testen equals Die Art und Weise, wie Sie es tun, ist aber auch in einem Prototyp -Muster für die Objekterstellung nützlich.

Das ist in Ordnung und ganz normal. Es ist ein bisschen seltsam, das zu denken this kann mit den privaten Feldern von herumspielen other, aber es ist in Ordnung, weil es auf keinen Fall etwas Schlimmes passieren kann, wenn es an Dritte passieren kann, mit einem zu muken Odp Die Interna des Objekts. Jede Methode der Odp Die Klasse kann alle privaten Mitglieder aller ändern Odp Objekt sogar nichtthis Eins, aber das ist in Ordnung, da solche Methoden offensichtlich vertrauenswürdig sind!

Dies ist eine Duplizierung von

Warum kann ich direkt auf meine privaten Variablen des "anderen" Objekts zugreifen, in meiner Methode (Equals O) (Objekt O)

Private Daten sind durch jede Instanz dieser Klasse zugänglich, auch wenn eine Instanz der Klasse A auf die privaten Mitglieder einer anderen Instanz von A zugreifen wird. Es ist wichtig, sich daran zu erinnern, dass Zugangsmodifikatoren (privat, geschützt, öffentlich) den Klassenzugriff kontrollieren, nicht der Klassenzugriff, nicht Instanzzugriff

Die Verwendung eines privaten Mitglieds für Entity -Klasse kann eine fälschliche Arbeit der Proxy -Klasse verursachen. Stellen Sie sich vor, der Hibernate erstellen Klasse von Lazy Query. Wenn Sie die Mitgliedervariable überprüfen, gibt es NULL zurück. Wenn Sie jedoch Get () anrufen, wird Daten aus der Datenbank abgerufen und das Feld initialisiert.

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