但一位同事说“这是一种不好的做法,Binding 对象应该是可选的。”
您的同事可能真的意味着绑定对象应该被包裹在Optional
.
我想知道什么是最好的选择绑定类型(可选或不)?
lateinit var
不是邪恶的。但是,它并不适用于所有情况。
在这种情况下,绑定对象具有特定的生命周期,我们需要在onDestroyView()
. 如果您将属性声明为:
private lateinit var binding: EditInsuranceDialogBinding
...那么在onDestroyView()
“我们没有有效的绑定”之后,您就无法将其设置为某种东西。在 之后运行的片段中很容易结束代码onDestroyView()
,并且该代码需要知道使用绑定是不安全的。无法创建EditInsuranceDialogBinding
表示“使用绑定不安全”状态的实例。
您选择的替代方案是合理的:
private var binding: EditInsuranceDialogBinding? = null
...你binding
在哪里设置null
。onDestroyView()
你也可以选择:
private var binding: Optional<EditInsuranceDialogBinding> = Optional.empty()
...你binding
回到Optional.empty()
的地方onDestroyView()
。您还可以使用自定义绑定委托,例如这个。
并且lateinit在编译器和内存中花费很多吗?
不。
什么时候不应该选择lateinit,什么时候应该使用它?
我尝试仅lateinit
在我非常确定我会在使用前对其进行初始化时使用。