Kotlin 类型安全构建器实战:优化资源状态处理

在 Kotlin 开发中,类型安全构建器可以帮助我们更安全、简洁地创建对象。将以 Android 应用中的资源状态处理为例,展示如何利用类型安全构建器优化代码。

假设我们有一个 Resource 类,它包含 SuccessLoadingError 三种状态,用于封装网络请求的结果。在之前的代码中,我们通过观察 TestViewModeluserInfoData 并使用 when 表达式处理不同状态,这会导致代码冗余。

为了解决这个问题,我们可以创建一个 ResourceObserver 类,它实现了 Observer 接口,并利用类型安全构建器的概念,根据不同的 Resource 子类执行相应的回调。

ResourceObserver 类接受一个 Lambda 表达式作为参数,该表达式会在对应的状态下调用相应的处理函数:

class ResourceObserver : Observer {
    private var success: (Resource.Success.() -> Unit)? = null
    private var error: (Resource.Error.() -> Unit)? = null
    private var loading: (Resource.Loading.() -> Unit)? = null

    fun success(block: Resource.Success.() -> Unit) {
        success = block
    }

    fun error(block: Resource.Error.() -> Unit) {
        error = block
    }

    fun loading(block: Resource.Loading.() -> Unit) {
        loading = block
    }

    override fun onChanged(t: Resource) {
        when (t) {
            is Resource.Success -> t.success?.invoke(t)
            is Resource.Error -> t.error?.invoke(t)
            is Resource.Loading -> t.loading?.invoke(t)
        }
    }
}
pdf 文件大小:42.83KB