在Dart语言中,late
关键字是Dart 2.12及更高版本中引入的一个特性,用于延迟初始化。它主要用于两种场景:非空类型的延迟初始化和显式的懒加载。
非空类型的延迟初始化
在引入空安全特性之后,Dart要求所有的变量在使用前都必须初始化。然而,在某些情况下,我们可能无法在声明变量的同时初始化它,比如依赖于构造函数参数或者需要进行异步操作来获取初始值。这时,late
关键字就派上了用场。通过late
标记的变量,Dart允许你稍后初始化这个变量,同时确保在第一次使用前已被初始化,否则会抛出异常。
Dart
class MyClass {
late String description;
void setDescription(String desc) {
description = desc;
}
}
显式的懒加载
late
还可用于变量的懒加载,即变量在第一次被访问时才进行初始化。这对于初始化开销较大的变量非常有用,可以在确实需要这些变量的时候才去创建它们,从而提高程序的性能。
Dart
class MyDatabase {
late final HeavyDatabase _database = HeavyDatabase();
HeavyDatabase get database => _database;
}
在这个例子中,_database
变量只会在第一次访问database
属性时被初始化,而不是在MyDatabase
类的实例被创建时。
注意事项
- 使用
late
时需要小心,因为如果在变量被正确初始化之前访问它,会抛出LateInitializationError
异常。 late
不应该被用作绕过空安全的手段。确保在第一次访问变量之前已经对其进行了初始化。- 对于懒加载的场景,考虑初始化开销和访问频率,决定是否使用
late
是一个好的选择。