调用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
相关产品推荐
相关产品推荐

