package Ġio . nav end ra . bing etime . Util Ċ Ċ // Singleton Holder Ġclass Ġto Ġimplement ĠSingleton Ġin ĠKotlin Ġwith Ġarguments Ċ // Kind ly Ġnote Ġthis Ġcannot Ġbe Ġachieved Ġusing ĠKotlin Ġobject Ċ // Check Ġthis Ġ- Ġhttps :// medium . com /@ Blade Coder / kotlin - sing letons - with - argument - 1 9 4 ef 0 6 edd 9 e ĊĊ Ċ open Ġclass ĠSingleton Holder < out ĠT , Ġin ĠA >( creator : Ġ( A ) Ġ-> ĠT ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcreator : Ġ(( A ) Ġ-> ĠT )? Ġ= Ġcreator ĊĠĠĠ Ġ@ Volatile Ġprivate Ġvar Ġinstance : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Double Ġchecked Ġlocking Ġalgorithm ĊĠĠĠ Ġfun ĠgetInstance ( arg : ĠA ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġinstance ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 2 Ġ= Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġcreator !! ( arg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= Ġcreated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreator Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ