package Ġandroidx . lifecycle Ċ Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* Ġ[ ViewModel Lazy ] Ċ Ġ* Ċ Ġ* Ġ@ author ĠChen Fe i ( chen fe i 0 9 2 8 @ gmail . com ) Ċ Ġ* Ġ@ date Ġ 2 0 2 0 - 0 4 - 2 2 Ġ 1 8 : 3 3 Ċ Ġ*/ Ċ class ĠKey ed ViewModel Lazy < VM Ġ: ĠViewModel >( ĊĠĠĠ Ġprivate Ġval Ġkey : ĠString , ĊĠĠĠ Ġprivate Ġval ĠviewModel Class : ĠK Class < VM >, ĊĠĠĠ Ġprivate Ġval Ġstore Producer : Ġ() Ġ-> ĠViewModel Store , ĊĠĠĠ Ġprivate Ġval Ġfactory Producer : Ġ() Ġ-> ĠViewModel Provider . Factory Ċ ) Ġ: ĠLazy < VM > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcached : ĠVM ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġvalue : ĠVM ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= Ġcached ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( viewModel Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġfactory Producer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstore Ġ= Ġstore Producer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( store , Ġfactory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( key , ĠviewModel Class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Initialized () Ġ= Ġcached Ġ!= Ġnull Ċ } Ċ