package Ġru . mak ar ov . kotlin . example . core . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġru . mak ar ov . kotlin . example . preferences . Preference Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* Ġ@ author ĠMax im ĠM ak ar ov Ċ Ġ* Ġ@ since Ġ 1 3 . 0 8 . 2 0 1 7 Ċ Ġ*/ Ċ object ĠDeleg ates Ext Ġ{ ĊĠĠĠ Ġfun Ġ< T > Ġnot Null Single Value () Ġ= ĠNot Null Single Value Var < T >() ĊĊĠĠĠ Ġfun Ġ< T > Ġpreference ( context : ĠContext , Ġname : ĠString , Ġdefault : ĠT ) Ġ= ĠPreference ( context , Ġname , Ġdefault ) ĊĠĠĠ Ġ// usage : Ġvar Ġzip Code : ĠLong Ġby ĠDeleg ates Ext . preference ( this , ĠZIP _ CODE , ĠDEFAULT _ ZIP ) Ċ } Ċ Ċ class ĠNot Null Single Value Var < T > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġvalue : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġoperator Ġfun ĠgetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġ?: Ġthrow ĠIllegalStateException ("${ property . name } Ġ" Ġ+ Ġ" not Ġinitialized ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun ĠsetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġif Ġ( this . value Ġ== Ġnull ) Ġvalue ĊĠĠĠĠĠĠĠ Ġelse Ġthrow ĠIllegalStateException ("${ property . name } Ġalready Ġinitialized ") ĊĠĠĠ Ġ} Ċ } Ċ