【发布时间】:2021-03-26 20:43:10
【问题描述】:
考虑以下最小示例:
class Element<T> {}
final elements = [
Element<String>(),
Element<int>(),
];
Element<T> transformation<T>(Element<T> element) => Element<T>();
void main() {
// prints 'Element<String>', 'Element<int>'
for (final element in elements) {
print(element);
}
// prints 'Element<Object>', 'Element<Object>',
// but I would like to get identical output as above.
for (final element in elements) {
print(transformation(element));
}
}
我不知道如何使用其各自的通用运行时类型 T 而不是 elements 集合的静态 Object 类型来创建每个 Element<T> 的转换。
我记得过去曾见过一些复杂的嵌套闭包技巧,但现在似乎找不到了。如何让我的函数捕获T 的运行时类型,而不必在Element 类本身中实现转换函数?
【问题讨论】:
-
我不认为你可以。
elements的静态类型必然是Element<Object>,泛型类型参数也是静态解析的,所以transformation()会是transformation<Object>()。
标签: dart