package Ġio . k cc . model Ċ Ċ const Ġval Ġtopic Separator Ġ= Ġ'/' Ċ Ċ /** Ċ Ġ* Ġ ĠUse Ġa Ġstandard Ġclass Ġin Ġorder Ġto Ġvalidate Ġconstructor Ġparameters Ċ Ġ* Ġ Ġ[ see ]( https :// kotlin lang . org / docs / classes . html # construct ors ) Ċ Ġ* Ċ Ġ* Ġ ĠThe ĠUser Ġowner Ġis Ġa Ġnullable Ġproperty Ġdeclared Ġby Ġusing Ġthe ĠUser ? Ġtype Ċ Ġ* Ġ Ġ[ see ]( https :// kotlin lang . org / docs / null - safety . html # nullable - types - and - non - null - types ) Ċ Ġ*/ Ċ class ĠTopic ( init Name : ĠString , Ġval Ġowner : ĠUser ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġ// ĠProperty Ġ' value ' Ġinitialized Ġby Ġthe Ġconstructor Ġ' init Name ' Ġparameter Ġafter Ġvalidation ĊĠĠĠ Ġval Ġname Ġ= Ġvalidate ( init Name ) ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate ( value : ĠString ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue . matches ("^ [ a - z ][ a - z 0 - 9 - ]{ 2 , 2 3 }$ ". to Regex ()) Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" topic Ġname Ġ'$ value ' Ġis Ġnot Ġvalid ! ĠIt Ġcan Ġonly Ġcontain Ġlowercase Ġletters , Ġnumbers , Ġhy ph ens , Ġstart Ġwith Ġa Ġletter Ġand Ġbe Ġ 3 - 2 4 Ġcharacters Ġin Ġlength " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"$ topic Separator $ name " ĊĊĠĠĠ Ġ// ĠSince Ġthis Ġis Ġa Ġstandard Ġclass Ġthe Ġequals ()/ hashCode () Ġpair Ġhas Ġbeen Ġmanually Ġoverridden ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġ' is ' Ġis Ġthe Ġsame Ġas Ġ' instance Of ' Ġin ĠJava ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġother Ġ! is ĠTopic ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġname Ġ== Ġother . name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġname . hashCode () Ċ } Ċ