Dart:如何定义方法使其返回传入Type参数对应的实例?
Dart依赖注入容器:关联泛型与Type参数
你的核心问题是当前get方法的泛型T与传入的Type参数未绑定,导致IDE无法提前检测类型不匹配的错误。以下是两种解决思路:
方案一:绑定泛型与传入的Type参数
通过断言校验+类型转换,让Dart类型系统识别泛型T与传入Type的关联,IDE会提前给出类型警告:
import 'dart:mirrors'; void main() { T get<T>(Type type) { // 强制校验传入Type与泛型T一致,编译时IDE提示,运行时兜底 assert(type == T, '传入的Type必须与泛型T匹配'); final classMirror = reflectClass(type); return classMirror.newInstance(Symbol.empty, []).reflectee as T; } // 正确用法:泛型、传入Type、赋值类型三者一致 Foo foo = get<Foo>(Foo); // 错误用法:IDE会直接提示类型不匹配 // Bar bar = get<Foo>(Foo); print(foo); } class Foo {} class Bar {}
方案二:直接通过泛型获取Type(更简洁)
不需要手动传入Type参数,直接利用泛型T获取对应的类镜像,这种写法更符合Dart的类型系统设计,IDE检查更精准:
import 'dart:mirrors'; void main() { T get<T>() { final classMirror = reflectClass(T); return classMirror.newInstance(Symbol.empty, []).reflectee as T; } // 正确用法 Foo foo = get<Foo>(); // 错误用法:IDE立即报错 // Bar bar = get<Foo>(); print(foo); } class Foo {} class Bar {}
两种方案都能实现你要的效果:当调用get方法的返回类型与赋值目标类型不匹配时,IDE提前给出警告,避免运行时错误。
内容的提问来源于stack exchange,提问作者Alessandro Amos
相关产品推荐
相关产品推荐

