Kotlini pitseeritud klassid

Sellest artiklist saate näidete abil teada klassi Suletud kohta, kuidas need on loodud ja millal neid kasutada.

Suletud klassi kasutatakse juhul, kui väärtusel võib olla ainult üks piiratud kogumi tüüpidest (piiratud hierarhiad).

Enne suletud klasside üksikasjade uurimist uurime, millise probleemi nad lahendavad. Võtame näite (võetud Kotlini ametlikult veebisaidilt - suletud klasside artikkel):

 class Expr class Const(val value: Int) : Expr class Sum(val left: Expr, val right: Expr) : Expr fun eval(e: Expr): Int = when (e) ( is Const -> e.value is Sum -> eval(e.right) + eval(e.left) else -> throw IllegalArgumentException("Unknown expression") )

Ülaltoodud programmis on baasklassil Expr kaks tuletatud klassi Const (tähistab arvu) ja Sum (tähistab kahe avaldise summat). Siin on elseavaldise olekus vaiketingimuseks kohustuslik kasutada haru.

Kui nüüd tuletate Exprklassist uue alaklassi , ei tuvasta kompilaator midagi, kui elseharu sellega tegeleb, mis võib põhjustada vigu. Parem oleks olnud, kui uue alamklassi lisamisel koostas kompilaator vea.

Selle probleemi lahendamiseks võite kasutada suletud klassi. Nagu mainitud, piirab suletud klass alamklasside loomise võimalust. Ja kui käsitlete whenavaldises kõiki suletud klassi alamklasse, pole elseharu vaja kasutada .

Suletud klassi loomiseks kasutatakse suletud modifikaatorit. Näiteks,

 pitseeritud klass Expr

Näide: suletud klass

Suletud klassi abil saate ülaltoodud probleemi lahendada järgmiselt:

 sealed class Expr class Const(val value: Int) : Expr() class Sum(val left: Expr, val right: Expr) : Expr() object NotANumber : Expr() fun eval(e: Expr): Int = when (e) ( is Const -> e.value is Sum -> eval(e.right) + eval(e.left) NotANumber -> java.lang.Double.NaN ) 

Nagu näete, pole elseharu. Kui tuletate Exprklassist uue alaklassi , kaebab kompilaator kaebuse, kui alamklass pole whenavaldises käsitletud .

Vähesed olulised märkused

  • Kõik suletud klassi alamklassid tuleb deklareerida samas toimikus, kus deklareeritakse pitseeritud klass.
  • Pitseeritud klass on iseenesest abstraktne ja te ei saa sellest objekte esile tõsta.
  • Te ei saa luua suletud klassi mitte-erasektori ehitajaid; nende konstruktorid on privatevaikimisi.

Erinevus Enumi ja suletud klassi vahel

Enumi klass ja kinnine klass on üsna sarnased. Ka loenditüübi väärtuste kogum on piiratud nagu suletud klass.

Ainus erinevus on see, et enumil võib olla ainult üks eksemplar, samas kui suletud klassi alamklassil võib olla mitu eksemplari.

Huvitavad Artiklid...