Olá Lucas. Tudo bem?
A questão que você levantou é uma particularidade da linguagem Kotlin relacionada à visibilidade das propriedades dentro de classes e inner classes. Quando você declara um parâmetro no construtor de uma classe em Kotlin usando val
ou var
, você está na verdade criando uma propriedade da classe que é acessível em todo o seu escopo. Por isso, ao utilizar (val binding: ItemRvBinding)
no construtor da sua inner class ViewHolder
, você está tornando binding
uma propriedade da instância de ViewHolder
, acessível em todos os métodos e partes da classe.
Por outro lado, quando você declara apenas (binding: ItemRvBinding)
, você está criando um parâmetro de construtor que não é promovido a uma propriedade da classe. Ele é acessível apenas dentro do construtor e não é armazenado como um campo da instância da classe. Isso significa que você não poderá acessar binding
fora do construtor da sua ViewHolder
.
Portanto, para ter acesso à binding
em outros métodos da sua inner class ViewHolder
, você precisa declará-la como uma propriedade da classe usando val
(ou var
, se precisar modificar o valor depois), como você fez corretamente.
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.