¿Cuál es el significado pretendido de "objeto compañero"? Hasta ahora lo he estado usando solo para reemplazar Java static
cuando lo necesito.
Estoy confundido con:
- ¿Por qué se llama "compañero"?
- ¿Significa que para crear múltiples propiedades estáticas , tengo que agruparlo dentro del
companion object
bloque? - Para crear instantáneamente una instancia de singleton que tenga el alcance de una clase, a menudo escribo
:
companion object {
val singleton by lazy { ... }
}
lo que parece una forma unidiomática de hacerlo. ¿Cuál es la mejor manera?
fuente
Este objeto es un compañero de las instancias. IIRC hubo una larga discusión aquí: próximo-cambio-clase-objetos-repensado
Si. Cada propiedad / método "estático" debe colocarse dentro de este compañero.
No crea la instancia singleton al instante. Se crea al acceder
singleton
por primera vez.Más bien vaya con
object Singleton { }
para definir una clase singleton. Consulte: Declaraciones de objetos No es necesario que cree una instanciaSingleton
, simplemente úsela asíSingleton.doWork()
Solo tenga en cuenta que Kotlin ofrece otras cosas para organizar su código. Ahora hay alternativas a las funciones estáticas simples, por ejemplo, podría utilizar las funciones de nivel superior.
fuente
¿Por qué se llama "compañero"?
Una declaración de objeto dentro de una clase se puede marcar con la palabra clave complementaria:
Se puede llamar a los miembros del objeto complementario simplemente usando el nombre de la clase como calificador:
Si solo usa 'objeto' sin 'compañero', debe hacer lo siguiente:
Según tengo entendido, 'compañero' significa que este objeto es compañero de la clase externa.
fuente
Podemos decir que el compañero es el mismo que el "Bloque estático" como Java, pero en el caso de Kotlin no hay un concepto de Bloque estático, entonces el compañero entra en el marco.
Cómo definir un bloque complementario:
Método de llamada del bloque complementario, directo con nombre de clase
fuente