Sobes.tech
Middle

Räägi mulle andmeklassidest ja suletud klassidest Kotlinis.

sobes.tech AI

Vastus AI-lt

Kotlinis kasutatakse andmeklassideks andmete salvestamiseks. Nad automaatselt genereerivad kasulikud meetodid equals(), hashCode(), toString(), copy(), samuti destruktureerimise komponendid.

// Näide andmeklassist
data class User(val name: String, val age: Int)

Sealed klassid kasutatakse piiratud klassi hierarhia esitamiseks. Kõik alamklassid peavad olema määratletud samas failis, mis ise sealed klass (Kotlin 1.5+ puhul on see piirang leevendatud). See võimaldab kompilaatoril veenduda alamklasside täielikus ülevaatuses, näiteks when väljendis.

// Näide sealed klassist
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Näide sealed klassi kasutamisest `when` väljendis
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Edu: ${result.data}")
        is Result.Error -> println("Viga: ${result.message}")
        Result.Loading -> println("Laadimine...")
    }
}

Peamised erinevused:

  • Otstarve: andmeklassid - andmete salvestamine, sealed klassid - klassi hierarhia piiramine.
  • Genereeritud meetodid: andmeklassid genereerivad standardmeetodid andmetele, sealed klassid - mitte.
  • Alamklasside piirangud: sealed klassid kehtestavad piirangud alamklasside deklaratsioonile, andmeklassid - mitte.
  • when täielik ülevaatus: Kotlini kompilaator saab kontrollida, kas kõik alamklassid on when-is käsitletud ilma else-ita.

Mõlemad, sealed ja andmeklassid, võivad olla abstraktsed, kuid andmeklassid ei saa olla open (kuna need on vaikimisi finalid) ning nad ei saa otse rakendada open meetodeid (ainult liideste või abstraktsete klasside kaudu). Sealed klassid on vaikimisi abstraktsed ning nende konstruktorid on privaatsed.