Dart反射泛型无法获取typeArguments问题排查求助
Dart中使用dart:mirrors获取泛型实际类型返回空集合的问题
问题描述
尝试获取泛型类传入的实际类型参数,但使用dart:mirrors的reflectClass方法始终返回空集合。目前必须使用dart:mirrors,未来计划迁移至reflectable模块。
原代码示例
import 'dart:mirrors'; class A<T> {} void main() { print( reflectClass(A<int>).typeArguments ); }
输出结果
[] Exited.
问题原因
reflectClass(A<int>)获取的是泛型类A的原始类镜像(ClassMirror),而非A<int>这个具体化泛型类型的镜像。Dart的泛型类定义层面的镜像不包含具体类型参数信息,类型参数仅在实例化后的对象中被保留。
解决方案
创建泛型类的实例,通过实例镜像(InstanceMirror)获取带有具体类型参数的TypeMirror,进而拿到实际类型参数:
import 'dart:mirrors'; class A<T> {} void main() { final instance = A<int>(); final instanceMirror = reflect(instance); print(instanceMirror.type.typeArguments); // 输出: [ClassMirror on 'int'] }
补充说明
如果未来迁移至reflectable模块,核心思路一致:需通过泛型类的实例获取具体化后的泛型类型信息,而非直接使用类字面量。reflectable同样依赖实例镜像保留泛型参数的具体类型。
内容的提问来源于stack exchange,提问作者Stepan Dyatkovskiy
相关产品推荐
相关产品推荐

