我们有一个自定义视图,我们希望通过该视图公开一个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())
}
是否可以保留在“自定义视图”中委派给该实例的引用?