gpt4 book ai didi

dart - late 和 final 可以一起用吗?

转载 作者:行者123 更新时间:2023-12-03 02:54:42 27 4
gpt4 key购买 nike

我现在正在尝试 NNBD,我想知道您是否可以使用新关键字 latefinal一起。
据我了解,late属性可以在任何地方设置。您基本上是在告诉分析器使用时它不会为空。
我认为在某些情况下这有点危险。
所以我想知道您是否可以添加 late final在 NNBD 中,这将告诉分析器该属性必须在类构造函数中初始化。
有一个类似的问题,但我想当时没有空安全性:
Dart. Late initialize final variables

最佳答案

您可以声明 late final多变的。
如果使用初始化器声明它,late final foo = computeSomething(); ,那么它是一个惰性最终变量。您不能分配给变量,但它的值仅在第一次读取变量时计算。 (根据我的经验,这绝不是局部变量的正确选择,即使语言允许这样做。如果您关心局部变量的延迟初始化,您几乎总是想知道它是否已初始化,而延迟变量不会'不给你那个信息。代码被乱序执行也令人困惑,它不允许你在初始化表达式中使用await)。
如果您声明 late final没有初始化器的变量,您可以一次写入变量。因为变量是late ,编译器不会在编译时提示分配,除非绝对确定您已经分配了变量,并且只有当它是局部变量时(因为这是编译器尝试跟踪分配的唯一变量)。
如果 late final没有初始化器的变量是类的实例成员,这意味着类接口(interface)有一个setter。你需要非常非常小心地暴露 late final类的公共(public) API 中的变量。 (阅读:不要那样做!)
最好在内部使用后期变量并保护对字段的访问,这样可以确保没有人两次分配变量。后期最终变量的目标是如果它被分配了两次就不会抛出。它不应该被分配两次。它允许允许由于某种原因知道编译器无法理解的代码,该变量只分配一次。因此,只允许对知道该原因并保持不变性的代码访问后期最终变量。

关于dart - late 和 final 可以一起用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64038304/

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