如何在Dart中返回可空类型对应的Type对象?
Dart中如何表示可空类型的Type对象?
我有一个代码生成库,需要获取生成的Type类型。大部分场景下代码运行正常,因为类型“包装器”能轻松关联到对应的Type,但遇到要返回Object?类型时找不到实现方法。
现有可正常运行的代码:
Type? typeFor(String name) { // simple examples if (name == 'String') return String; if (name == 'bool') return bool; return null; }
尝试添加Object?的处理逻辑时:
Type typeFor(String name) { // simple examples if (name == 'String') return String; if (name == 'bool') return bool; return Object?; }
Dart会把Object?识别为不完整的三元运算符,加括号(Object?)也没用,想问有没有办法在Dart中表示可空类型的Type?
解决方法
在Dart中,直接写Object?作为Type值会被语法解析误解,你可以通过以下两种方式获取可空类型的Type对象:
利用泛型函数捕获类型
这是最可靠的方式,通过一个泛型辅助函数返回指定类型的Type:Type _typeOf<T>() => T; Type typeFor(String name) { if (name == 'String') return String; if (name == 'bool') return bool; return _typeOf<Object?>(); }泛型函数
_typeOf<T>会直接返回泛型参数T对应的Type对象,完美解决Object?的语法解析问题。通过变量类型推导(有局限)
先声明一个可空类型的变量,再通过runtimeType获取其类型:Type typeFor(String name) { if (name == 'String') return String; if (name == 'bool') return bool; Object? nullableObject; // 注意:如果nullableObject是null,runtimeType会返回Null类型,而非Object? return nullableObject.runtimeType; }这种方式的局限性在于,当变量值为
null时,runtimeType会返回Null类型,而非预期的Object?,所以更推荐第一种泛型方法。
内容的提问来源于stack exchange,提问作者Renato
相关产品推荐
相关产品推荐

