假设我有这样一个类:
class Class<T extends num> {
const Class(this.n);
final T n;
@override
String toString() {
return 'Class<$T>(n: $n<${n.runtimeType}>)';
}
}
当我运行这段代码时:
for (final n in <num>[0.3, 2, -4]) {
final instance = Class(n);
print('$instance');
}
final instance = Class(1);
print('$instance');
我得到这个输出:
Class<num>(n: 0.3<double>)
Class<num>(n: 2<int>)
Class<num>(n: -4<int>)
Class<int>(n: 1<int>)
为什么Dart不使用数字的实际类型?为什么使用List
泛型?
1条答案
按热度按时间wswtfjt71#
泛型的类型参数(类似地,类型推断)在 compilation-time 处理。它们只能使用 statically 已知的次数,而不能使用运行时类型。例如,
Class<n.runtimeType>
无效。当迭代
List<num>
时,每个元素 n 静态地只知道是num
,所以Class(n)
被推断为Class<num>
。使用
Class(1)
时,1
是int
文本,因此表达式的类型被推断为Class<int>
。