1
resposta

Construtor

Para que serve o construtor secundário se eu posso customizar o construtor primário?

1 resposta

Oi Diego, tudo tranquilo?

Os construtores secundários serão úteis caso precisemos adicionar mais lógica na inicialização da classe. Eles são bem parecidos com os construtores do Java, a diferença é que quando implementamos esses construtores secundários ao mesmo tempo que um construtor primário, precisamos fazer com que todos os secundários chamem o primário (através da palavra-chave this()) para garantir que as properties passadas como parâmetro das secundárias sejam sempre inicializadas pelo construtor primário. A motivação para isso é que o tanto o bloco init quanto os inicializadores das propriedades dependem das properties passadas para o construtor primário para que o objeto seja construído corretamente.

Usando como exemplo esse post do Stack Overflow:

class Rectangle(val width: Int, val height: Int) {

    constructor(size: Int) : this(size, size)

    val area = width * height

    init {
        println("New rectangle, $width x $height")
    }

}

Aqui temos o construtor secundário que recebe apenas um parâmetro size: Int. Mas perceba que tanto o bloco init como o inicializador val area precisam de dois parâmetros para construir o objeto corretamente, para resolver isso precisamos garantir que quando o secundário for invocado, ele chame o primário para que todos os parâmetros necessários sejam inicializados corretamente.

Espero ter ajudado, se ficou qualquer dúvida é só avisar!

Bons estudos!!