作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在浏览 Dart By Example 中 Shailen Tuli 的片段集。 ,当我遇到以下代码时:
List<String> fruits = [
{'name': 'apple', 'selected': true},
{'name': 'banana', 'selected': true},
{'name': 'kiwi', 'selected': false}
];
fruits
被声明为
List<String>
但列表元素实际上是 map 。
最佳答案
如果代码示例是用强静态类型语言编写的,则会报告错误。但是 Dart 是:
List<num> lst = [4, "ty-two"];
[4, "ty-two"]
很重要。 ,如给定,类型为
List<dynamic>
,其中
dynamic
是
静态类型 当静态类型系统不知道它是什么时(例如,用户没有声明静态类型),或者不想费心进行更深入的分析以找出可能是什么类型时,归因于表达式——如列表中的泛型参数就是这种情况
lst
.
List<num> lst = <num>[4, "tytoo"];
List<String> fruits = <Map>[{'name': 'apple', ...}, ...];
lst
的情况下乐观系统可以很容易地分辨出
String
"ty-two"
永远不能是
num
类型.类似备注适用于
fruits
.另一方面,如果我们有
var a = "tytoo";
List<num> lst = <num>[4, a];
var
声明一个变量有效地意味着(对于静态类型检查器)
a
类型为
dynamic
.因此,在对
lst
的赋值中没有报告错误。 .
关于generics - 当列表文字的元素与声明的泛型类型不匹配时,不会报告类型错误。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506541/
我是一名优秀的程序员,十分优秀!