Dart泛型中runtimeType返回_Type而非实际类型的问题解决
问题解决
你的问题出在对泛型类型参数T的runtimeType使用错误上——T.runtimeType返回的是类型参数本身的运行时类型(即_Type),而非你期望的实际目标类型(比如String)。
正确的做法是直接使用value is T进行类型检查,这会直接验证value是否为T类型的实例,是Dart中类型检查的标准方式。修改后的扩展方法如下:
extension Wrapper<T> on Map<String, dynamic> { T? property({required String key}) { final value = this[key]; // 直接检查value是否为T类型的实例 if (value is T) { return value; } return null; } }
调用方式保持不变:
final String? val2 = map.property(key: "bool");
补充说明
如果需要严格匹配类型(不允许子类实例被匹配),比如自定义类继承场景下要区分父类和子类实例,可以改用类型直接对比:
extension Wrapper<T> on Map<String, dynamic> { T? property({required String key}) { final value = this[key]; // 严格匹配运行时类型 if (value != null && T == value.runtimeType) { return value as T; } return null; } }
这种情况下,只有当value的运行时类型和T完全一致时才会返回值,否则返回null。
内容的提问来源于stack exchange,提问作者user1007522
相关产品推荐
相关产品推荐

