Middle
Ի՞նչ են 'sealed' դասերը Kotlin-ում և ինչ դեպքերում պետք է օգտագործել:
sobes.tech AI
Պատասխան AI-ից
sealed դասը օգտագործվում է սահմանափակված դասերի ժառանգականությունը ներկայացնելու համար: Բոլոր ուղղակի ժառանգները sealed դասի պետք է սահմանվեն նույն ֆայլում, ինչ sealed դասը, կամ նույն մոդուլներում (Kotlin 1.5+ համար): Սա թույլ է տալիս կոմպիլյատորին ստուգել, որ բոլոր հնարավոր ենթատեսակները մշակված են when արտահայտությունում, դարձնելով այն լրիվ առանց else ճյուղի:
Հիմնական առանձնահատկություններ:
- Բոլոր ուղղակի ենթատիպերը պետք է լինեն տեղական:
sealedդասի կոնստրուկտորը ըստ նախնականըprivateէ:sealedդասը չի կարող լինել աբստրակտ:- Չի թույլատրվում ստեղծել օրինակներ:
Օգտագործման դեպքեր:
- Սահմանափակ վիճակների կամ արդյունքների ներկայացում: Օրինակ,
Loading,Success(data),Error(message):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>() } - Վերջնական արդյունքների մշակումը
whenարտահայտությունում, ապահովելով լրիվության ստուգում:fun processResult(result: Result<String>) { when (result) { is Result.Success -> println("Տվյալներ ստացվեցին: ${result.data}") is Result.Error -> println("Սխալ: ${result.message}") Result.Loading -> println("Բեռնվում է...") } // `else` ճյուղի կարիք չկա, քանի որ կոմպիլյատորը գիտի բոլոր ենթատեսակները: } - Օգտագործում որպես enum-ների համարժեք, տվյալների ինկապսուլացիայով յուրաքանչյուր տարբերակում:
Համեմատություն enum դասերի հետ:
| Գծագրություն | enum class |
sealed class |
|---|---|---|
| Օրինակներ | Հատուկ անունավորված կոնստանտների սահմանափակ հավաքածու | Հատուկ տիպերի սահմանափակ հավաքածու |
| Տվյալներ տարբերակներում | Չի (միայն հատկություններ) | Այո (միջադասարանների միջոցով) |
| Աբստրակտ անդամներ | Չի | Այո |
| ժառանգություն | Չի | Այո, բայց միայն նույն ֆայլում/մոդուլում |