Comme Kotlin en action États
Le mot-clé objet apparaît dans Kotlin dans un certain nombre de cas, mais ils partagent tous la même idée de base : le mot-clé définit une classe et crée une une instance (en d'autres termes, un objet) de cette classe en même temps. même temps.
lorsqu'il s'agit d'un objet simple et d'un objet compagnon, la seule différence significative est que l'on peut accéder aux propriétés et aux fonctions d'un objet compagnon en utilisant directement le nom de la classe qui le contient, ce qui ressemble à l'accès aux membres statiques de java.
par exemple, si vous avez la classe suivante
class Temp{
object Holder{
fun foo() = 1
}
companion object{
fun foo() = "Hello World"
}
}
alors vous pouvez accéder à ces deux objets comme suit Depuis la classe contenant
foo() // call to companion object function
Holder.foo() // call to plain object function
et de l'extérieur de la classe
Temp.foo() // call to companion object function
Temp.Holder.foo() // call to plain object function
Sous le capot, chaque déclaration d'objet crée un singleton. Dans le cas d'un objet compagnon, l'objet singleton est créé dans l'initialisateur statique de la classe qui le contient. Mais dans le cas d'objets simples, l'instance singleton est créée paresseusement lorsque la classe d'objet est accédée pour la première fois.
Vous pouvez le constater par vous-même en compilant la classe kotlin, puis en décompilant les fichiers de classe générés à l'aide d'un décompilateur java.
Quant à la raison pour laquelle il est également possible de déclarer un objet normal dans la classe, considérez la classe suivante où un objet membre est très utile.
data class Employee(val name: String) {
object NameComparator : Comparator<Employee> {
override fun compare(p1: Employee, p2: Employee): Int =
p1.name.compareTo(p2.name)
}
}
maintenant nous pouvons trier une liste d'employés comme
list.sortedWith(Employee.NameComparator))
4 votes
object
pour les singletons etcompanion object
pour les méthodes statiques. Kotlin - Déclarations d'objets fournit une bonne explication de l'utilisation.