Dart:无法将具有泛型的类型分配给Type变量

时间:2017-05-30 11:29:49

标签: generics types dart

如果我尝试将一个带有泛型的类型赋给Type变量,我会收到一个错误,但如果我使用一个runtimeType变量,一切正常。

  Type t = List;
  //Type t1 = List<int>;  // ERROR !!!
  Type t2 = new List<int>().runtimeType;
  print('$t $t2');  //> List List<int>

这是一个错误还是我没有得到什么?

2 个答案:

答案 0 :(得分:1)

你的第一行令人惊讶,但是,是的,它有效。类文字的类型为&#34; Type&#34;:

print((List).runtimeType);
--> TypeImpl

print(List is Type);
--> true

你的代码片段的其余部分的问题正是你在github上找到的问题:

https://github.com/dart-lang/sdk/issues/11923

- 该类文字不能使用泛型。您必须获取一个实例并使用runtimeType来获取您想要的类型。

答案 1 :(得分:0)

Type不是您可以成为任何其他课程的班级。它是对象的runtimeType属性的类型。它用于推断对象的类型。

Type t = List;

Dos并没有神奇地将t的类型设为List;

Type t = List<int>;

这会尝试将List<int>分配给Type类型的变量,从而导致错误。

也许有些混乱源于:

print(t);

打印List,但这实际上是打印t.toString(),它返回字符串'List'。