package Ġcom . kotlin . note .` class ` Ċ Ċ import Ġorg . junit . Test Ċ import Ġkotlin . properties . Deleg ates Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* Ġ[ Deleg ated Property ]( https :// kotlin lang . org / docs / reference / deleg ated - properties . html ) Ċ Ġ*/ Ċ class ĠDeleg ated Property Learn Ġ{ ĊĊĠĠĠ Ġclass ĠExample Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġp : ĠString Ġby ĠDelegate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠDelegate Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun ĠgetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ this Ref , Ġthank Ġyou Ġfor Ġdeleg ating Ġ'${ property . name }' Ġto Ġme !" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun ĠsetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property <* >, Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ value Ġhas Ġbeen Ġassigned Ġto Ġ'${ property . name }' Ġin Ġ$ this Ref .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Deleg ated Property () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠExample () ĊĠĠĠĠĠĠĠ Ġprintln ( e . p ) ĊĠĠĠĠĠĠĠ Ġe . p Ġ= Ġ" NEW " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¬¬ ä¸Ģæ¬¡ ä¼ļ æī§è¡Į Ġlambda ï¼Į ä»¥ åĲİ çĽ´æİ¥ è¿ĶåĽŀ åĢ¼ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġé»ĺè®¤ æĺ¯ åĲĮæŃ¥ çļĦ ï¼Į åı¯ä»¥ æĶ¹ ä¸º å¼ĤæŃ¥ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Lazy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlazy Value : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" computed !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Hello " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" First ") ĊĠĠĠĠĠĠĠ Ġprintln ( lazy Value ) ĊĠĠĠĠĠĠĠ Ġprintln (" Second ") ĊĠĠĠĠĠĠĠ Ġprintln ( lazy Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObservable ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġåľ¨ èµĭåĢ¼ ä¹ĭåĲİ æī§è¡Į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Observable () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠUser Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname : ĠString Ġby ĠDeleg ates . observable ("< no Ġname >") Ġ{ Ġprop , Ġold , Ġnew Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġåľ¨ èµĭåĢ¼ ä¹ĭåĲİ æī§è¡Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ old Ġ-> Ġ$ new ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser () ĊĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġ" first " ĊĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġ" second " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠV eto able ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġåľ¨ èµĭåĢ¼ ä¹ĭåīį æī§è¡Į ï¼Į åı¯ä»¥ åĲ¦ åĨ³ èµĭåĢ¼ æĵįä½ľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Veto able () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠUser Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname : ĠString Ġby ĠDeleg ates . vet o able ("< no Ġname >") Ġ{ Ġprop , Ġold , Ġnew Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġåľ¨ èµĭåĢ¼ ä¹ĭåīį æī§è¡Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ old Ġ-> Ġ$ new ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè¿ĶåĽŀ Ġtrue Ġè¡¨ç¤º åħģè®¸ æī§è¡Į ï¼Į false Ġè¡¨ç¤º ä¸į æī§è¡Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ġ!= Ġ" null " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser () ĊĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġ" first " ĊĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġ" null " ĊĠĠĠĠĠĠĠ Ġprintln ( user . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠJSON ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠUser ( val Ġmap : ĠMap < String , ĠAny ?> ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ġby Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġage : ĠInt Ġby Ġmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" John ĠDoe ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" age " Ġto Ġ 2 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprintln ( user . name ) Ġ// ĠPrints Ġ" John ĠDoe " ĊĠĠĠĠĠĠĠ Ġprintln ( user . age ) Ġ Ġ// ĠPrints Ġ 2 5 ĊĠĠĠ Ġ} Ċ Ċ }