Was ist die beabsichtigte Bedeutung von "Begleitobjekt"? Bisher habe ich es nur verwendet, um Java zu ersetzen, static
wenn ich es brauche.
Ich bin verwirrt mit:
- Warum heißt es "Begleiter"?
- Bedeutet dies, dass ich mehrere statische Eigenschaften innerhalb eines
companion object
Blocks zusammenfassen muss, um sie zu erstellen ? - Um sofort eine Singleton-Instanz zu erstellen, die sich auf eine Klasse bezieht, schreibe ich oft
::
companion object {
val singleton by lazy { ... }
}
Das scheint eine unidiomatische Art zu sein. Was ist der bessere Weg?
quelle
Dieses Objekt ist ein Begleiter der Instanzen. IIRC gab es hier eine lange Diskussion: bevorstehende-Änderung-Klasse-Objekte-Überdenken
Ja. Jede "statische" Eigenschaft / Methode muss in diesem Begleiter platziert werden.
Sie erstellen die Singleton-Instanz nicht sofort. Es wird beim ersten Zugriff erstellt
singleton
.Gehen Sie lieber mit
object Singleton { }
, um eine Singleton-Klasse zu definieren. Siehe: Objektdeklarationen Sie müssen keine Instanz von erstellenSingleton
, verwenden Sie sie einfach soSingleton.doWork()
Denken Sie daran, dass Kotlin andere Dinge anbietet, um Ihren Code zu organisieren. Es gibt jetzt Alternativen zu einfachen statischen Funktionen, z. B. können Sie stattdessen Top-Level-Funktionen verwenden.
quelle
Warum heißt es "Begleiter"?
Eine Objektdeklaration innerhalb einer Klasse kann mit dem Schlüsselwort Companion gekennzeichnet werden:
Mitglieder des Begleitobjekts können aufgerufen werden, indem einfach der Klassenname als Qualifikationsmerkmal verwendet wird:
Wenn Sie nur 'Objekt' ohne 'Begleiter' verwenden, müssen Sie Folgendes tun:
Nach meinem Verständnis bedeutet "Begleiter", dass dieses Objekt ein Begleiter der äußeren Klasse ist.
quelle
Wir können sagen, dass Companion der gleiche ist wie "Static Block" wie Java, aber im Fall von Kotlin gibt es kein Static Block-Konzept, als Companion in den Frame kommt.
So definieren Sie einen Begleitblock:
Aufrufmethode des Companion-Blocks, direkt mit Klassennamen
quelle