Ответ
Плюсы:
✅ Ограниченная иерархия – компилятор знает все возможные подклассы
✅ Идеально для представления закрытых состояний (например, Loading, Success, Error)
✅ Полная поддержка when-выражений без else (если все кейсы покрыты)
✅ Безопасность типов – нельзя создать незадекларированный подкласс
Минусы:
❌ Нельзя расширять вне файла/модуля, где объявлен sealed class
❌ Немного шаблонный код для каждого подкласса
Пример:
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Error(val message: String) : Result<Nothing>()
object Loading : Result<Nothing>()
}
fun handleResult(result: Result<String>) = when(result) {
is Result.Success -> println(result.data)
is Result.Error -> println(result.message)
Result.Loading -> println("Loading...")
}