我们正在处理一个遗留的API,其中API在某些情况下会返回一个与预期不同的类型。所以我希望在Map上有一些extion来检索属性或返回null。
extension Wrapper<T> on Map<String, dynamic> {
T? property({required String key}) {
final value = this[key];
if (T.runtimeType == value.runtimeType) {
return value;
}
return null;
}
}
使用方法:
final String? val2 = map.property(key: "bool");
问题是T.runtimeType给出的是_Type而不是String,我怎样才能得到真实的的属性类型呢?
2条答案
按热度按时间eqqqjvef1#
发生这种情况是因为T本身已经是类型了。当你从
Type
调用runtimeType
时,你会得到一个Type
;尝试使用类型中的
toString()
方法并比较值。对于您的情况,我做了一些更改。将泛型从
Wrapper<T>
移动到方法属性:然后用你的类型和每个属性调用它:
下一个案例运行良好:
lmyy7pcs2#
T
已经是一个Type
对象,因此您可以直接比较它:注意,这样的相等性检查测试 * 确切 * 类型标识;如果一个类型是另一个类型的子类型,则它不会返回true。
如果您想检查
value.runtimeType
是否是T
的子类型,则只需使用: