Qual é o significado pretendido de "objeto complementar"? Até agora, eu tenho usado apenas para substituir o Java static
quando preciso.
Estou confuso com:
- Por que é chamado de "companheiro"?
- Isso significa que, para criar várias propriedades estáticas , eu tenho que agrupá-las dentro de um
companion object
bloco? - Para criar instantaneamente uma instância singleton com escopo definido para uma classe, costumo escrever
:
companion object {
val singleton by lazy { ... }
}
o que parece ser uma maneira uniomática de fazê-lo. Qual é a melhor maneira?
fonte
Este objeto é um companheiro das instâncias. IIRC houve uma longa discussão aqui: próxima mudança-classe-objetos-repensada
Sim. Toda propriedade / método "estático" precisa ser colocado dentro desse companheiro.
Você não cria a instância singleton instantaneamente. É criado ao acessar
singleton
pela primeira vez.Em vez disso,
object Singleton { }
defina uma classe singleton. Consulte: Declarações de objetos Você não precisa criar uma instânciaSingleton
, apenas use-a assimSingleton.doWork()
Lembre-se de que o Kotlin oferece outros itens para organizar seu código. Agora existem alternativas para funções estáticas simples, por exemplo, você pode usar as funções de nível superior.
fonte
Por que é chamado de "companheiro"?
Uma declaração de objeto dentro de uma classe pode ser marcada com a palavra-chave associada:
Os membros do objeto complementar podem ser chamados usando simplesmente o nome da classe como qualificador:
Se você usar apenas 'objeto' sem 'companheiro', precisará fazer o seguinte:
No meu entendimento, 'companheiro' significa que esse objeto é companheiro da classe externa.
fonte
Podemos dizer que companheiro é o mesmo que "Static Block" como Java, mas no caso do Kotlin não há conceito de Static Block, então companheiro entra em cena.
Como definir um bloco complementar:
Método de chamada do bloco complementar, direto com o nome da classe
fonte