考虑以下通用类:
class Foo<T extends Bar<dynamic>> {}
如何在编译时获取Bar
的通用参数?
我希望以下代码可以打印int
,但它可以打印dynamic
:
class Bar<T> {}
class Foo<T extends Bar<dynamic>> {
Foo(this.value) {
_debugBarType(value);
}
final T value;
void _debugBarType<A>(Bar<A> value) {
print(A);
}
}
void main() {
Foo<Bar<int>>(Bar());
}
我知道我可以做到:
class Foo<A, Bar<A>> {}
但是我想使用一个通用参数而不是两个来定义Foo
类。
答案 0 :(得分:1)
目前在 any 类上是不可能的。
Dart上目前有一个待处理的功能请求来支持这种用例:https://github.com/dart-lang/language/issues/620
值得注意的是,如果可以在相关类上添加方法,则有一种解决方法。
例如,假设您有一个通用类Model<T>
:
class Model<T> {
T value;
}
然后,您可以添加“捕获”方法,如下所示:
class Model<T> {
T value;
R capture<T>(void cb<P>(P value)) => cb<T>(value);
}
然后,您可以这样写:
void someFunction<T extends Model<dynamic>>(T model) {
model.capture(<P>(value) {
// `P` will be the captured type instead of `dynamic`
});
}