2016-07-12 4 views
2

Aloha! Beim Lesen der Kotling-Sprachreferenz habe ich festgestellt, dass das Schlüsselwort "privat" für Eigenschaften einer Klasse niemals verwendet wird (immer Standard, das öffentlich ist). Es wurde auch gesagt, dass Getter und Setter automatisch generiert werden. Also habe ich Klasse erstellt und seine Felder privat gemacht. Wenn ich jedoch ein Objekt der Klasse erzeuge, kann ich die Felder nicht sehen und es sind keine Setter und Getter verfügbar, außer wenn ich sie selbst schreibe. Also, was ist die Regel hier? Lassen Sie den Sichtbarkeitsmodifikator Standard (public) oder machen Sie ihn privat und stellen Sie Mutator-Methoden zur Verfügung? Danke.Sollten die Eigenschaften der Klasse in Kotlin privat sein und wie kann man darauf zugreifen?

Antwort

10

Die ganze Idee einer Eigenschaft ist, dass sie ein Feld und seine Accessoren in einer einzigen Einheit kapselt. Wenn Sie von außen auf eine Eigenschaft einer Klasse zugreifen und diese ändern möchten, sollten Sie die Eigenschaft public beibehalten. Wenn Sie in der Lage sein müssen, von außen zu lesen, aber nicht zu aktualisieren, können Sie eine öffentliche Eigenschaft mit einem privaten Zugriffsmechanismus definieren.

Wenn Sie einen Standard-Accessor auf einen benutzerdefinierten Accessor ändern, wirkt sich dies nicht auf die Clients Ihrer Klasse aus, da der Compiler immer Accessormethoden generiert und die Clients der Klasse diese Methoden verwenden und nicht auf das zugrunde liegende Feld zugreifen direkt.

Sie sollten niemals explizite Getter- oder Mutator-Methoden schreiben, die von den Eigenschaftenaccessoren getrennt sind.

+0

So ist es praktisch unmöglich, direkt zum Eigentum richtig zu gelangen? Und ich bin sicher, sie immer öffentlich zu halten? (Ich kam aus Java, wo alles privat sein sollte) Wie wäre es intern? – Sermilion

+0

Was meinst du mit "direkt an die Immobilie gelangen"? Auf ein Hintergrundfeld einer Eigenschaft kann nur durch Reflektion zugegriffen werden. Die 'interne' Sichtbarkeit sollte verwendet werden, wenn auf die Eigenschaft nur von demselben Modul aus zugegriffen wird. – yole

+0

Ich meinte wie in Java, wenn Sie Feld öffentlich machen, können Sie es ohne Getter und Setter zugreifen, was nicht gut ist. Aber ich habe es jetzt, danke. – Sermilion

Verwandte Themen