gpt4 book ai didi

android - 我们什么时候应该为一个对象选择lateinit?将绑定(bind)设置为非可选和延迟初始化是不好的做法吗?

转载 作者:行者123 更新时间:2023-12-04 07:30:52 28 4
gpt4 key购买 nike

我在 fragment 中被声明为 lateinit var binding: EditInsuranceDialogBinding 的绑定(bind)对象但一位同事说“这是一个不好的做法,Binding 对象应该是可选的。”
所以在声明中会变成这样:var binding: EditInsuranceDialogBinding? = null , 在 onCreateContentView 中初始化并使它成为 nullonDestroyView我想知道什么是最好的选择绑定(bind)类型(可选或不)?做延迟初始化 编译器和内存要花很多钱?我们什么时候应该不是 选择延迟初始化 我们什么时候应该使用它?

最佳答案

but a colleague said "This is a bad practice and Binding object should be Optional . "


有可能你的同事真的是说绑定(bind)对象应该包裹在 Optional中。 .

I want to know what is the best to choose the type of Binding (optional or not)?

lateinit var不是邪恶的。但是,它并不适用于所有情况。
在这种情况下,绑定(bind)对象具有特定的生命周期,我们需要在 onDestroyView() 之后停止使用它。 .如果您将属性声明为:
private lateinit var binding: EditInsuranceDialogBinding
...那么您无法将其设置为 onDestroyView() 之后的值上面写着“我们没有有效的绑定(bind)”。在 onDestroyView() 之后运行的 fragment 中很容易出现代码。 ,并且该代码需要知道使用绑定(bind)是不安全的。无法创建 EditInsuranceDialogBinding表示“使用绑定(bind)不安全”状态的实例。
您选择的替代方案是合理的:
private var binding: EditInsuranceDialogBinding? = null
...您设置的位置 bindingnullonDestroyView() .
你也可以选择:
private var binding: Optional<EditInsuranceDialogBinding> = Optional.empty()
...您设置的位置 binding返回 Optional.empty()onDestroyView() .还有自定义绑定(bind)委托(delegate),如 this one ,你可以使用。

and does lateinit cost a lot in the compiler and memory ?


不。

When we should NOT choose lateinit and when we should use it?


我尝试只使用 lateinit当我非常确定我会在使用前对其进行初始化。

关于android - 我们什么时候应该为一个对象选择lateinit?将绑定(bind)设置为非可选和延迟初始化是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67938125/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com