/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠN az mul ĠI dr is ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġtypes afety Ċ Ċ import Ġutils . red Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ Ġsample 1 () ĊĠ Ġsample 2 () Ġ// Ġnote Ġthis Ġthrows Ġan Ġexception Ċ } Ċ Ċ // ĠEl vis Ġand Ġtype Ċ data Ġclass ĠUser ( val Ġname : ĠString , Ġval Ġage : ĠInt ) Ġ{ ĊĠ Ġfun Ġis Equal ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġother Person : ĠUser Ġ= Ġother Ġas ? ĠUser Ġ?: Ġreturn Ġfalse ĊĠĠĠ Ġreturn Ġage Ġ== Ġother Person . age Ġ&& Ġname . equals ( other Person . name ) ĊĠ Ġ} Ċ } Ċ Ċ fun Ġsample 1 () Ġ{ ĊĠ Ġprintln (" sample 1 ". red ()) ĊĠ Ġval Ġu 1 Ġ= ĠUser (" n az ", Ġ 4 3 ) ĊĠ Ġval Ġu 2 Ġ= ĠUser (" m aret ", Ġ 2 8 ) ĊĠ Ġval Ġnum Ġ= Ġ 1 ĊĠ Ġprintln ("$ u 1 Ġis Ġequal Ġto Ġ$ u 2 Ġ: Ġ${ u 1 . isEqual ( u 2 )} ") ĊĠ Ġprintln ("$ u 1 Ġis Ġequal Ġto Ġ$ num Ġ: Ġ${ u 1 . isEqual ( num )} ") Ċ } Ċ Ċ // ĠEl vis Ċ fun Ġsample 2 () Ġ{ ĊĠ Ġprintln (" sample 2 ". red ()) ĊĠ Ġval Ġp 1 Ġ= ĠPerson (" Jack ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompany (" Google ", ĠAddress (" Google plex ", Ġ" MV ", Ġ 9 4 0 4 0 , Ġ" US "))) ĊĠ Ġprint Shipping Label ( p 1 ) ĊĠ Ġval Ġp 2 Ġ= ĠPerson (" J ill ", Ġnull ) ĊĠ Ġprint Shipping Label ( p 2 ) Ċ } Ċ Ċ class ĠAddress ( ĊĠĠĠ Ġval Ġstreet : ĠString , ĊĠĠĠ Ġval Ġcity : ĠString , ĊĠĠĠ Ġval Ġzip code : ĠInt , ĊĠĠĠ Ġval Ġcountry : ĠString Ċ ) Ċ Ċ class ĠCompany ( val Ġname : ĠString , Ġval Ġaddress : ĠAddress ?) Ċ class ĠPerson ( val Ġname : ĠString , Ġval Ġcompany : ĠCompany ?) Ċ Ċ fun Ġprint Shipping Label ( person : ĠPerson ) Ġ{ ĊĠ Ġval Ġaddress Ġ= Ġperson . company ?. address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" No Ġaddress Ġfound ") ĊĠ Ġwith ( address ) Ġ{ ĊĠĠĠ Ġprintln ("$ street \ n $ city , Ġ$ zip code , Ġ$ country ") ĊĠ Ġ} Ċ }