flutter 为什么Dart泛型不使用实际的示例类型来创建父类?

ryoqjall  于 2023-02-05  发布在  Flutter
关注(0)|答案(1)|浏览(132)

假设我有这样一个类:

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泛型?

wswtfjt7

wswtfjt71#

泛型的类型参数(类似地,类型推断)在 compilation-time 处理。它们只能使用 statically 已知的次数,而不能使用运行时类型。例如,Class<n.runtimeType>无效。
当迭代List<num>时,每个元素 n 静态地只知道是num,所以Class(n)被推断为Class<num>
使用Class(1)时,1int文本,因此表达式的类型被推断为Class<int>

相关问题