Es gibt zwei verschiedene object
Verwendungsarten: Ausdruck und Deklaration .
Objektausdruck
Ein Objektausdruck kann verwendet werden, wenn eine Klasse geringfügig geändert werden muss, es ist jedoch nicht erforderlich, eine völlig neue Unterklasse dafür zu erstellen. Anonyme innere Klassen sind ein gutes Beispiel dafür.
button.setOnClickListener(object: View.OnClickListener() {
override fun onClick(view: View) {
}
})
Eine Sache, auf die Sie achten müssen, ist, dass anonyme innere Klassen auf Variablen aus dem umschließenden Bereich zugreifen können, und diese Variablen müssen es nicht sein final
. Dies bedeutet, dass eine Variable, die in einer anonymen inneren Klasse verwendet wird, die nicht berücksichtigt wird final
, den Wert unerwartet ändern kann, bevor auf sie zugegriffen wird.
Objektdeklaration
Eine Objektdeklaration ähnelt einer Variablendeklaration und kann daher nicht auf der rechten Seite einer Zuweisungsanweisung verwendet werden. Objektdeklarationen sind sehr nützlich für die Implementierung des Singleton-Musters.
object MySingletonObject {
fun getInstance(): MySingletonObject {
}
}
Und die getInstance
Methode kann dann so aufgerufen werden.
MySingletonObject.getInstance()
Begleitobjekt
Ein Begleitobjekt ist eine bestimmte Art von Objektdeklaration, mit der sich ein Objekt ähnlich wie statische Objekte in anderen Sprachen (z. B. Java) verhalten kann. Durch Hinzufügen companion
zur Objektdeklaration kann einem Objekt die "statische" Funktionalität hinzugefügt werden, obwohl das eigentliche statische Konzept in Kotlin nicht vorhanden ist. Hier ist ein Beispiel für eine Klasse mit Instanzmethoden und Begleitmethoden.
class MyClass {
companion object MyCompanionObject {
fun actsAsStatic() {
}
}
fun instanceMethod() {
}
}
Das Aufrufen der Instanzmethode würde folgendermaßen aussehen.
var myClass = MyClass()
myClass.instanceMethod()
Das Aufrufen der Companion-Objektmethode würde folgendermaßen aussehen.
MyClass.actsAsStatic()
Weitere Informationen finden Sie in den Kotlin-Dokumenten .
object
für Singletons undcompanion object
für statische Methoden. Kotlin - Objektdeklarationen bieten eine gute Erklärung für die Verwendung.