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

调用CountryModel构造函数提示‘isn't a function’的原因及优化方案

问题分析与解决方案

报错原因

你在searchFromJson<CountryModel>(json)方法中,把CountryModel声明为泛型类型参数,这会在当前方法的作用域内**遮蔽(shadow)**外部的CountryModel类名。此时方法内部的CountryModel不再指代你的实体类,而是一个泛型类型变量——类型变量不能被当作构造函数调用,所以会抛出“CountryModel isn't a function”的错误。

无需辅助函数的修复方案

方案1:移除不必要的泛型参数

你的searchFromJson方法明确返回CountryModel实例,完全不需要泛型。直接修改方法签名,去掉泛型参数即可:

@override
CountryModel searchFromJson(json){
  return CountryModel(
      id: json['id'],
      name: json['name'],
      countryCode: json['code'],
      phoneCode: json['phone_code']);
}

这是最简洁的修复方式,完全匹配方法的实际功能。

方案2:保留泛型但避免类名遮蔽

如果出于某些原因必须保留泛型(比如严格匹配抽象类的泛型方法签名),可以将泛型参数改名,避免和类名冲突,同时约束泛型类型为CountryModel的子类:

@override
T searchFromJson<T extends CountryModel>(json){
  return CountryModel(
      id: json['id'],
      name: json['name'],
      countryCode: json['code'],
      phoneCode: json['phone_code']) as T;
}

这种方式既满足泛型方法的定义,又不会遮蔽类名,通过类型转换确保返回值符合泛型要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:55:21