Sobes.tech
Junior — Middle

Em que casos e em que lugar pode-se declarar subclasses se a classe estiver marcada como sealed?

sobes.tech IA

Resposta da IA

Em Kotlin, uma classe marcada como sealed limita a hierarquia de herança: todas as subclasses dessa classe devem ser declaradas no mesmo ficheiro que a própria classe sealed. Isto permite ao compilador conhecer o conjunto completo de herdeiros e usá-lo, por exemplo, em expressões when sem necessidade de escrever um ramo else.

Ou seja, as subclasses de uma classe sealed podem ser declaradas:

  • No mesmo ficheiro onde a classe sealed é declarada.
  • Dentro da própria classe sealed (classes aninhadas).

Exemplo:

sealed class Result {
    class Success(val data: String) : Result()
    class Error(val error: Throwable) : Result()
}

Ou

sealed class Result

class Success(val data: String) : Result()
class Error(val error: Throwable) : Result()

Mas todas essas subclasses devem estar no mesmo ficheiro que a classe sealed. Esta restrição ajuda a garantir a segurança dos tipos e a completude das verificações.