Middle
O que são classes seladas e qual é a sua finalidade?
sobes.tech IA
Resposta da IA
As classes seladas representam hierarquias de classes limitadas. São usadas para representar um conjunto restrito de estados ou valores possíveis.
Principais características e propósitos:
- Hierarquia limitada: Os descendentes de uma classe selada devem ser declarados no mesmo ficheiro ou aninhados dentro da classe selada antes do Kotlin 1.5. Desde a versão 1.5, esta restrição é relaxada: os descendentes podem estar em qualquer ficheiro do mesmo pacote.
- Classes enum com estado: Ao contrário das classes enum, cada descendente de uma classe selada pode ter o seu próprio estado e comportamento.
whenexaustivo: O compilador garante que o blocowhenpara uma instância de uma classe selada seja exaustivo (todos os casos estão cobertos), se não for especificada uma ramificaçãoelse. Isto reduz a probabilidade de erros em tempo de execução.
Exemplo:
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>() // Instância única
}
fun processResult(result: Result<String>) {
when (result) {
is Result.Success -> {
// Processamento do resultado bem-sucedido
println("Data: ${result.data}")
}
is Result.Error -> {
// Processamento do erro
println("Error: ${result.exception.message}")
}
Result.Loading -> {
// Processamento do estado de carregamento
println("Loading data...")
}
// Nenhuma ramificação else necessária, pois todas as subclasses
// de Result são tratadas pelo compilador
}
}
Propósito:
- Representação segura de estados: Representar de forma fiável um número finito de estados possíveis, por exemplo, o resultado de uma requisição de rede (
Success,Error,Loading). - Melhoria da legibilidade do código: Tornar o código mais explícito ao tratar diferentes casos.
- Aumento da fiabilidade das expressões
when: O compilador ajuda a evitar casos não tratados. - Substituição de classes enum com estado: Quando é necessário associar dados a "variantes" específicas de um enumerado.
Assim, as classes seladas fornecem uma forma flexível de modelar conjuntos finitos de valores com a capacidade de armazenar dados específicos para cada valor, garantindo segurança e clareza ao tratar esses valores em expressões when.