کلاسهای Sealed و Enum هر دو برای مدل کردن دادههای محدود به کار میروند، اما با تفاوتهای مهمی:
الف - Sealed Classes (کلاسهای مهرهدار یا Sealed):کلاسهای Sealed یک نوع خاص از کلاسها در کاتلین هستند که با استفاده از کلیدواژه sealed
اعلام میشوند.
این کلاسها میتوانند یک مجموعه محدود از زیرکلاسها را تعریف کنند. بدین معنا که تمامی زیرکلاسهای یک کلاس Sealed باید در همان فایلی که خود کلاس Sealed در آن تعریف شده است، قرار گیرند.
یکی از استفادههای شایع این کلاسها، مدل کردن یک وضعیت محدود است. به عنوان مثال، یک وضعیت مختصر و تصمیمگیری بین چند گزینه.
زیرکلاسهای یک کلاس Sealed میتوانند دارای ویژگیها (properties) و روشهای (methods) خود باشند.
مثال:
sealed class Result {
class Success(val data: String) : Result()
class Error(val error: Throwable) : Result()
}
ب - Enums:Enumerations یا Enums به یک مجموعه مقادیر معین و محدود اشاره دارند.
اعضای یک Enum به صورت ثابت (static) هستند و نمیتوان آنها را در زمان اجرا تغییر داد.
از Enums برای نمایش مقادیر ثابت مانند روزهای هفته یا وضعیتهای محدود استفاده میشود.
علاوه بر این، هر عضو از یک Enum میتواند مقداری ویژگی داشته باشد.
مثال:
enum class Direction {
NORTH, SOUTH, EAST, WEST
}
به طور کلی، اگر بخواهید مقادیر محدود و معین را نمایش دهید و تنها از آنها به عنوان ورودیها استفاده کنید، معمولا از Enums استفاده میشود، در حالی که اگر بخواهید با وضعیتهای متفاوت و دادههای مختلف مواجه شوید و یا میخواهید قابلیت افزودن وضعیتهای جدید را داشته باشید، از کلاسهای Sealed استفاده میکنید.