package Ġapp . en velop . common Ċ Ċ /* Ċ Ġ* ĠBased Ġon Ġhttps :// medium . com /@ david cors al ini / ive - expanded - the - optional - sealed - class - a - bit - c 3 0 d 3 2 9 e 0 f 0 c Ċ Ġ*/ Ċ sealed Ġclass ĠOptional < out ĠT > Ġ{ ĊĠ Ġclass ĠSome < out ĠT >( val Ġelement : ĠT ) Ġ: ĠOptional < T >() ĊĠ Ġobject ĠNone Ġ: ĠOptional < Nothing >() ĊĊĠ Ġfun Ġelement (): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠ Ġis ĠNone Ġ-> Ġnull ĊĠĠĠĠĠ Ġis ĠSome Ġ-> Ġelement ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġ< K > Ġmap ( mapper : Ġ(( T ) Ġ-> ĠK ? )): ĠOptional < K > Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠ Ġis ĠSome Ġ-> Ġcreate ( mapper . invoke ( element )) ĊĠĠĠĠĠ Ġis ĠNone Ġ-> ĠNone ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġthis Ġ=== Ġother Ġ|| Ġ( ĊĠĠĠĠĠĠĠ Ġother Ġis ĠOptional < *> Ġ&& Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġis ĠNone Ġ&& Ġother Ġis ĠNone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġelement ()?. equals ( other . element ()) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġjava Class . hashCode () ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġ< T > Ġcreate ( element : ĠT ?) Ġ= ĊĠĠĠĠĠ Ġelement ?. let Ġ{ ĠSome ( it ) Ġ} Ġ?: ĠNone ĊĠ Ġ} Ċ }