You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

List<Model>运行时类型检查异常:List<Model>与List<dynamic>不匹配怎么办?

问题解决:List无法匹配List类型分支的原因及修复

原代码的问题在于**runtimeType会返回具体的泛型类型**,比如List<Model>的runtimeType是List<Model>,而case List匹配的是原始List类型(无泛型参数)的runtimeType,两者不相等,导致分支不命中。

修复方案:用is关键字做类型检查

Dart中推荐用is关键字判断类型归属,它会识别所有泛型子类(比如List<Model>属于List类型),无需依赖runtimeType。修改后的函数如下:

bool nullEmptyChk(dynamic val) {
  // 优先判断null
  if (val == null) return true;
  // 判断是否为List(含任意泛型)
  if (val is List) return val.isEmpty;
  // 判断是否为String
  if (val is String) return val.isEmpty;
  // 其他类型仅判断是否为null(已提前判断,此处直接返回false)
  return false;
}

额外说明

  1. 去掉了原代码的try-catch:提前判断val == null后,后续调用isEmpty不会触发空指针异常,无需捕获。
  2. 如果需要检查特定泛型的List(比如仅匹配List<Model>),可以写成val is List<Model>,但你的需求是匹配所有List类型,val is List足够覆盖。

内容的提问来源于stack exchange,提问作者Joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:08:18