Dart中能否将Type类型对象作为泛型参数传入泛型类实例化?
结论
Dart 不支持你示例中的写法。
原因
Dart 的泛型参数要求必须是编译期就能确定的类型常量,你代码中声明的 someType 是 Type 类型的运行时变量,不能直接作为泛型参数传入。
替代方案
- 如果你可以在编译阶段确定使用的类型,直接写死泛型参数即可,这是性能最好、类型安全度最高的写法:
SomeClass c = SomeClass<MyType>();
- 如果需要动态选择泛型类型,可以借助泛型函数中转实现:
SomeClass<T> createSomeClass<T>() => SomeClass<T>(); // 调用时传入编译期确定的类型 SomeClass c = createSomeClass<MyType>();
- 如果你的使用场景完全是运行时动态获取类型,只能放弃泛型的编译期校验,使用
dynamic作为泛型参数,再自行补充运行时类型检查逻辑。
内容的提问来源于stack exchange,提问作者iOSonntag
相关产品推荐
相关产品推荐

