延迟属性
val p: String by lazy {// 计算该字符串}
利用Lazy帮助实现初始化
lazy() 是一个函数, 接受一个 Lambda 表达式作为参数, 返回一个 Lazy
fun startInit(component: Components.()->Unit){component.invoke(Components.get())}class Components {companion object{private val entry = ArrayMap<String,Any?>()private val instant by lazy { Components() }fun get() = instantfun getEntry() = entry}inline fun <reified T>single(single: ()->T){val name = T::class.java.namegetEntry()[name] = single()}}inline fun <reified T> get(name: String = T::class.java.name) : T{return Components.getEntry()[name] as T}inline fun <reified T> inject(name: String = T::class.java.name) : Lazy<T> {return lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { Components.getEntry()[name] as T }}// 使用例子startInit {single { RoomApi.getDao() }single { RetroHttp.createApi(Main::class.java) }}private val main : Main by inject()private val dao : MainDao by inject()复制代码
总结:简单的代码优化,提高开发效率
