Middle
Como usar classes seladas para modelar hierarquias em Kotlin?
sobes.tech IA
Resposta da IA
As classes seladas (sealed classes) são usadas para representar hierarquias de herança limitadas, onde todos os subtipos possíveis são conhecidos na fase de compilação.
Principais características:
- Todos os subtipos diretos devem estar no mesmo ficheiro que a classe selada (antes do Kotlin 1.5). A partir do Kotlin 1.5, podem estar em qualquer ficheiro da mesma compilação.
- Os subtipos de uma classe selada podem ser classes normais, data classes, declarações object ou outras classes seladas.
- O construtor da classe selada por padrão é privado; outros modificadores (public, protected, internal) não são permitidos.
- Permitem usar uma análise exaustiva (
exhaustive) em expressões when, o que garante o tratamento de todas as opções possíveis e elimina a necessidade de uma cláusula else.
Exemplo de uso para modelar o estado de uma interface de utilizador:
sealed class UiState {
object Loading : UiState() // Estado de carregamento
data class Success(val data: String) : UiState() // Dados carregados com sucesso
data class Error(val message: String) : UiState() // Erro
}
Uso numa expressão when:
fun handleUiState(state: UiState): String {
return when (state) {
UiState.Loading -> "A carregar dados..."
is UiState.Success -> "Dados carregados com sucesso: ${state.data}"
is UiState.Error -> "Erro: ${state.message}"
}
}
Vantagens:
- Segurança de tipos: o compilador verifica se todos os subtipos possíveis são tratados.
- Legibilidade: mostra claramente que variantes de dados ou estados podem existir.
- Conveniência: simplifica o trabalho com expressões
when.