飞镖参数列表混乱(dart confusion on parameterized List)

2019-10-17 14:38发布

为什么这个代码不抛出一个错误?

List<String> x;

void main() {
  x = [1,23,3,423,2];
  print(x);
}

很抱歉的新手问题,但我刚开始学习镖,我问这个,因为我的理解是, x只能包含列表String ,应该抛出一个异常,由于价值不列表String ,但名单num 。 这是一个错误,还是?

Answer 1:

这是在行动可选打字。

var x; // same as List<String> x
List<String> y;

main() {
  x = [1,2,3,4];
  y = x; // valid
  x = y; // valid
  print(x); // [1,2,3,4]
  print(y); // [1,2,3,4]
}

无论您指定List<String>var ,你的代码将执行相同。 类型的注释( List<String> )被用于由工具来验证代码。

一篇好文章对dartlang网站阅读是一个关于可选类型 。

编辑:其实,这也是关于列表一个有趣的问题。 如果您使用文字列表初始化列表(例如, []那么你实际上是在创建一个List()例如:

main() {
  var x = new List(); 
  var y = [];
  print(x is List); // true
  print(y is List); // true
}

但是,如果你想使用泛型类型化的列表,你必须使用构造函数的语法,如:

main() {
  var x = new List<String>();
  print(x is List); // true
  print(x is List<String>); // true
  print(x is List<num>); // false
}


Answer 2:

飞镖类型是可选的不是一成不变的。 因此,在运行时的所有类型annonations基本上替换为var



文章来源: dart confusion on parameterized List
标签: dart