Middle
შენ იცნობ sealed კლასებს და რა არის მათი თავისებურება?
sobes.tech AI
პასუხი AI-სგან
დიახ, ვიცნობ.
sealed კლასების თვისება ის არის, რომ ისინი საშუალებას აძლევენ მემკვიდრეობის ჰიეარარქიის შეზღუდვას. ყველა პირდაპირი ქვესახეობა sealed კლასის უნდა იყოს გამოცხადებული ერთ ფაილში. ეს უზრუნველყოფს, რომ კომპილატორი იცის ყველა შესაძლო ქვესახეობა, რაც სასარგებლოა when გამოთქმებში სრულიობის შემოწმებისთვის.
მაგალითი:
sealed class Result {
data class Success(val message: String) : Result()
data class Error(val code: Int, val description: String) : Result()
object Loading : Result() // სინგლტონი დატვირთვის მდგომარეობისთვის
}
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("წარმატება: ${result.message}")
is Result.Error -> println("შეცდომა ${result.code}: ${result.description}")
Result.Loading -> println("იტვირთება...")
// `else` საჭირო არაა, რადგან კომპილატორი იცის ყველა ვარიანტი
}
}
უპირატესობები:
- უსაფრთხოება: გარანტირებულია
whenგამოთქმების სრულიობა,else-ის გარეშე. - საპრინტარობა: ნათლად აჩვენებს შეზღუდულ რაოდენობას შესაძლო მდგომარეობებისა ან ქვესახეობების.
- კონტროლი: თავიდან აცილება გარედან კონტროლირებადი მემკვიდრეობის.
სხვაობა enum class-თან:
sealed კლასები შეიძლება ჰქონდეთ სხვადასხვა მონაცემთა ტიპები თითოეულ ქვესახეობაზე (მაგალითად, Success და Error), მაშინ როდესაც enum class ელემენტები სტატიკულია და მხოლოდ გარკვეული თვისებები შეიძლება ჰქონდეთ, რომლებიც საერთოა ყველა ელემენტისთვის. sealed კლასები ასევე შეიძლება ჰქონდეთ ობიექტის მაგალითები (Loading).