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

最佳答案

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

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

10-10 18:02