null_check_on_nullable_type_parameter
空检查运算符不应在类型为可能为空的类型参数的变量上使用。
描述
#当对类型为 T?
的变量使用空检查运算符时,分析器会生成此诊断,其中 T
是一个允许类型实参可为空(没有上界或上界可为空)的类型参数。
给定一个具有可空上界的泛型类型参数 T
,在使用 T?
类型的变量时很容易引入错误的空检查。具体来说,常见的情况是定义 T? x;
并想断言 x
已被设置为类型 T
的有效值。一个常见的错误是使用 x!
来实现。这几乎总是错误的,因为如果 T
是一个可空类型,x
可能有效地持有 null
作为类型 T
的值。
示例
#以下代码会产生此诊断,因为 t
的类型是 T?
,并且 T
允许类型实参可为空(因为它没有 extends
子句)。
dart
T f<T>(T? t) => t!;
常见修复
#使用类型参数来转换变量
dart
T f<T>(T? t) => t as T;