devterview_$ iniciar simulação

`sealed class`/`sealed interface` e `when` exaustivo

MédioPlenoSistema de tipos

Pergunta

O que uma hierarquia `sealed` permite no Kotlin que uma hierarquia aberta não permite?

Resposta esperada

`sealed` restringe as subclasses/implementações a um conjunto fechado, conhecido em tempo de compilação (todas no mesmo módulo/pacote). O ganho principal: um `when` sobre um tipo sealed pode ser EXAUSTIVO — o compilador sabe todas as variantes, então você não precisa de `else`, e se alguém adicionar uma variante nova e esquecer de tratá-la em algum `when`, vira erro de compilação. É o equivalente das uniões discriminadas do TS: modela um estado com N formas (`Loading`, `Success(data)`, `Error(msg)`) e garante que todo ponto que consome trate todas. Com hierarquia aberta, o compilador não pode assumir que conhece todas as subclasses, então todo `when` precisa de `else` e a exaustividade não é verificada. `sealed interface` (Kotlin 1.5+) permite que uma variante implemente várias hierarquias sealed.

Por que perguntam isso

Pergunta pleno de Kotlin. Paralelo direto com discriminated unions do TS. Sinal bom: 'when exaustivo sem else' e o exemplo Loading/Success/Error.

#sealed#when#exhaustiveness
publicidade

Perguntas de acompanhamento

Relacionadas