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
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.
- 1. Umgang mit C# -Eigenschaften, die nicht null sein sollten
- 2. Sollten die Eigenschaften meiner Scala-Darsteller @volatile sein?
- 3. Klasse Methode nicht Eigenschaften zugreifen
- 4. Was sollten die Subversion-Eigenschaften für eine * .xml-Datei sein?
- 5. Sollten die Eigenschaften meiner Akka-Darsteller @volatile sein?
- 6. Was ist die Initialisierungssemantik der Kotlin-Klasse?
- 7. Wie kann ich auf das Kotlin-Begleitobjekt in Java zugreifen?
- 8. Methode, die ein Array in Java zurückgibt, kann privat sein?
- 9. Wie kann ich ein Dateihandle in einer Perl-Klasse speichern und darauf zugreifen?
- 10. Objekte in Arrays speichern und darauf zugreifen
- 11. Wie kann eine abgeleitete Klasse auf die privaten Mitgliedsdaten zugreifen?
- 12. Wie referenziere ich die Instanz der äußeren Klasse in Kotlin?
- 13. Wie kann ich Elemente einer Instanz der Klasse "dist" mit Core R bearbeiten/darauf zugreifen?
- 14. Klasse Schnittstelle implementieren sollten in der Lage sein, nur ein Objekt der gleichen Klasse hinzufügen
- 15. Wie feinkörnig sollten Module in Prism sein?
- 16. Kann ich auf äußere Klassenobjekte in der inneren Klasse zugreifen
- 17. JAVA: einschließlich Dateien in jar und wie Sie darauf zugreifen
- 18. Wie kann man auf die Eigenschaften von Bildern zugreifen, die in der Unterklasse von UIImageView in einer anderen Controller-Klasse deklariert sind?
- 19. Wie erstellt man eine Instanz der anonymen Klasse der abstrakten Klasse in Kotlin?
- 20. In C# Wie sollte ein abgeschlossenes Async-Ereignis auf die Eigenschaften der aufrufenden Klasse zugreifen?
- 21. Wie kann man auf die Elementeigenschaften in einem Repeater zugreifen?
- 22. Wie komplex sollten Rauchversuche sein?
- 23. Mischen von Java und Kotlin Im Gradle-Projekt kann Kotlin die Java-Klasse nicht finden
- 24. C# schreibgeschützte berechnete Eigenschaften, sollten sie Methoden sein?
- 25. Wie ResourceDictionary in Telefon Klassenbibliothek Projekt hinzufügen und darauf zugreifen
- 26. Wie kann man die Kotlin-Lambda-Syntax verbessern?
- 27. So rufen Sie die JSF-Aktion für eine anonyme Klasse auf? EL kann nicht darauf zugreifen
- 28. var innerhalb der Klasse ist leer, wenn Sie innerhalb derselben Klasse darauf zugreifen
- 29. Wie kann man in Delphi auf die (Super-) Basisklasse zugreifen?
- 30. Wie kann ich auf die Eigenschaften eines anonymen Objekts zugreifen?
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
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
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