package Ġcom . on eli ang . k tx . frame . test Ċ Ċ import Ġkotlin . properties . Deleg ates Ċ import Ġkotlin . reflect . K Property Ċ Ċ fun Ġ< T Ġ: ĠAny > Ġfield Observer ( property : ĠK Property <* >, ĠoldValue : ĠT , ĠnewValue : ĠT ) Ġ{ ĊĠĠĠ Ġprintln (" property Ġname :${ property . name }, Ġold Ġvalue ;$ oldValue , Ġnew Ġvalue :$ newValue ") Ċ } Ċ Ċ class ĠBy For Field Ġ{ ĊĠĠĠ Ġvar Ġfield : ĠString Ġby ĠField Delegate () ĊĠĠĠ Ġval Ġlazy Field : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġ// only Ġfor Ġval ĊĠĠĠĠĠĠĠ Ġprintln (" I Ġam Ġin Ġlazy Ġinitializer ") ĊĠĠĠĠĠĠĠ Ġ" I Ġam Ġlazy Ġfield " ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġobserver StringField : ĠString Ġby ĠDeleg ates . observable ("", ĠonChange Ġ= Ġ:: field Observer ) ĊĠĠĠ Ġvar Ġobserver Int Field : ĠInt Ġby ĠDeleg ates . observable ( 0 , ĠonChange Ġ= Ġ:: field Observer ) Ċ } Ċ Ċ class ĠField Delegate Ġ{ ĊĠĠĠ Ġoperator Ġfun ĠsetValue ( by For Field : ĠBy For Field , Ġproperty : ĠK Property <* >, Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" original Ġvalue :$ value , Ġneed Ġto Ġset Ġvalue :$ value ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun ĠgetValue ( by For Field : ĠBy For Field , Ġproperty : ĠK Property < *> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" get Ġvalue ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" 1 2 3 " ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġbyte For Field Ġ= ĠBy For Field () ĊĠĠĠ Ġbyte For Field . field Ġ= Ġ" 1 " // original Ġvalue : 1 , Ġneed Ġto Ġset Ġvalue : 1 ĊĠĠĠ Ġprintln ( byte For Field . field ) ĊĠĠĠ Ġbyte For Field . lazy Field ĊĠĠĠ Ġbyte For Field . lazy Field ĊĠĠĠ Ġbyte For Field . observer StringField Ġ= Ġ" observer " ĊĠĠĠ Ġbyte For Field . observer Int Field Ġ= Ġ 2 Ċ }