flutter - 在初始化之前添加泛型类型和忽略它有什么区别
问题描述
我忘了在第一个代码<Widget>
之后写。但是和children:
之间有什么区别。 children: <Widget>[]
children: []
children: <Widget>[
Expanded(
child: Container(
child: Image.asset('images/dice1.png'), ),),],
children: <Widget>[
Expanded(
child: Image.asset('images/dice1.png'),),];
解决方案
当你写List<Widget> chidren = <Widget>[];
的时候,这里发生了两件事:
- 的引用
List<Widget> chidren
被创建。 - 并将一个对象
<Widget>[];
分配给该引用。
所以,
通过声明引用<Widget>
让编译器知道只有您想要接受分配给该引用的对象应该是类型Widget
或子类型Widget
。
并且通过分配一个对象<Widget>
来告诉编译器当前对象是 type <Widget>
。在这里<Widget>[];
,您是说列表仅Widget
包含Widget
.
如果您在创建列表之前没有指定类型,[];
那么任何类型的对象都可以在列表中。但是,如果您指定列表是类型,Widget
则仅Widget
允许在列表中。
为了对此进行测试,请尝试创建一个List list = [];
并尝试在其中添加 int 或 string 或任何任意类型的数据。您将被允许在其中保存任何类型的数据。现在创建List<Widget> list = <Widget>[];
,您将只被允许将小部件添加到列表中,而不是其他任何东西。
泛型有什么用??
当您在该对象中输入错误类型的数据时,您将收到编译时错误而不是运行时错误。
试飞镖垫:
List<int> ints = ['string'];
// 不会给你编译时错误,而是一个字符串不能分配给 int 的运行时错误。
List<int> ints = <int>['string'];
// 会给你编译时错误。
当涉及到错误时,编译时错误比运行时错误要好得多。
推荐阅读
- mongodb - 为集群创建的用户的 Mongo DB Atlas 密码更改
- unity3d - GetKeyDown 或 GetKey 不起作用,而是发送错误消息。(统一)
- cucumber - 如何在黄瓜中执行一个文件具有一些功能列表
- keras - 在 tensorflow / Keras 中如何实现 val_loss 和 val_accuracy?
- android - Android Exo Player,在视频顶部的特定位置添加一个视图
- json - 推送到 Heroku 时,纱线安装一直在循环
- ios - App Store应用需要用苹果最新的代码签名证书重新签名
- android - 我可以通过“使用 Apple ID 登录”获取用户的电话号码以进行电话验证吗?
- swift - 无法访问 MTKView
- sql - 如何让我的 PostgresSQL 成功执行调用?