跳到主内容

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;