Quelle est la signification voulue de «objet compagnon»? Jusqu'à présent, je ne l'ai utilisé que pour remplacer Java static
lorsque j'en ai besoin.
Je suis confondu avec:
- Pourquoi s'appelle-t-il "compagnon"?
- Cela signifie-t-il que pour créer plusieurs propriétés statiques , je dois les regrouper dans un
companion object
bloc? - Pour créer instantanément une instance de singleton étendue à une classe, j'écris souvent
:
companion object {
val singleton by lazy { ... }
}
ce qui semble être une manière unidiomatique de le faire. Quelle est la meilleure façon?
la source
Cet objet est un compagnon des instances. IIRC, il y a eu une longue discussion ici: objets-de-classe-de-changement-à venir-repensés
Oui. Chaque propriété / méthode "statique" doit être placée dans ce compagnon.
Vous ne créez pas instantanément l'instance singleton. Il est créé lors de l'accès
singleton
pour la première fois.Allez plutôt avec
object Singleton { }
pour définir une classe singleton. Voir: Déclarations d'objets Vous n'avez pas besoin de créer une instance deSingleton
, utilisez-la simplement comme çaSingleton.doWork()
Gardez simplement à l'esprit que Kotlin propose d'autres éléments pour organiser votre code. Il existe maintenant des alternatives aux fonctions statiques simples, par exemple vous pouvez utiliser des fonctions de niveau supérieur à la place.
la source
Pourquoi s'appelle-t-il "compagnon"?
Une déclaration d'objet à l'intérieur d'une classe peut être marquée avec le mot-clé compagnon:
Les membres de l'objet compagnon peuvent être appelés en utilisant simplement le nom de classe comme qualificatif:
Si vous n'utilisez que «objet» sans «compagnon», vous devez procéder comme suit:
Dans ma compréhension, «compagnon» signifie que cet objet est compagnon avec la classe extérieure.
la source
Nous pouvons dire que le compagnon est le même que "Static Block" comme Java, mais dans le cas de Kotlin, il n'y a pas de concept de bloc statique, alors le compagnon entre dans le cadre.
Comment définir un bloc compagnon:
Méthode d'appel du bloc compagnon, direct avec le nom de la classe
la source