带有私有主构造函数的自定义视图

时间:2019-06-07 06:30:57

标签: android kotlin

我们有一个自定义视图,我们希望通过该视图公开一个API。为了避免用逻辑使视图混乱,我们希望将逻辑放入单独的类中,并通过类委派实现它们。

考虑此设置:

interface LoginFeatureCapabilities {
   fun login(): Boolean
}

class LoginFeatureImpl: LoginFeatureCapabilities {
   override fun login() = ...
}

我们还有一个自定义视图,现在想将LoginFeatureCapabilities委托给LoginFeatureImpl实例,同时仍然能够访问它,这意味着我们必须将其添加到主构造函数中: / p>

class CustomView @JvmOverloads constructor(
    context: Context, 
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0,
    val loginFeatureImpl: LoginFeatureImpl = LoginFeatureImpl()
): View(context), LoginFeatureCapabilities by loginFeatureImpl

这将导致视图为null并使应用程序崩溃-尽管日志中没有特定错误。

添加私有构造函数也无济于事:

class CustomView private constructor(
    context: Context,
    val loginFeatureImpl: LoginFeatureImpl = LoginFeatureImpl()
): View(context), LoginFeatureCapabilities by loginFeatureImpl {

    @JvmOverloads constructor(
        context: Context, 
        attrs: AttributeSet? = null,
        defStyleAttr: Int = 0
    ): this(context, LoginFeatureImpl())

}

是否可以保留在“自定义视图”中委派给该实例的引用?

0 个答案:

没有答案