Отличие sealed от enum классов
В Kotlin enum
и sealed
классы являются способами определения фиксированного набора значений или состояний, но они используются в разных ситуациях и имеют различные особенности. Вот основные отличия между ними:
В Kotlin enum
и sealed
классы являются способами определения фиксированного набора значений или состояний, но они используются в разных ситуациях и имеют различные особенности. Вот основные отличия между ними:
enum
:
enum
(enumeration) используется для определения набора констант, которые представляют фиксированные и неизменные значения.enum class Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
sealed
:
sealed
(печать) класс позволяет определить и ограничить набор подтипов, которые могут быть у этого класса. Он гарантирует, что все возможные подклассы известны на этапе компиляции.sealed class Result {
data class Success(val data: String) : Result()
data class Error(val exception: Exception) : Result()
object Loading : Result()
}
enum
:
enum
класса.enum class Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
fun isWeekend() = this == SATURDAY || this == SUNDAY
}
sealed
:
sealed
может содержать несколько подклассов, и все они должны быть объявлены в том же файле, что и сам sealed
класс.sealed class Result {
data class Success(val data: String) : Result()
data class Error(val exception: Exception) : Result()
object Loading : Result()
fun isSuccess(): Boolean = this is Success
}
enum
:
sealed
:
when
для безопасного обхода всех возможных типов.enum
: Используется для определения фиксированного набора именованных значений. Подходит для случаев, когда набор значений не изменяется и не требует дополнительной логики в подклассах.sealed
: Используется для определения ограниченного набора подклассов, что позволяет легко управлять различными типами и обрабатывать их с помощью безопасных конструкций when
. Подходит для более сложных случаев с разными типами данных и дополнительной логикой.