首页 > 解决方案 > 在初始化之前添加泛型类型和忽略它有什么区别

问题描述

我忘了在第一个代码<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'),),];

标签: flutterflutter-layout

解决方案


当你写List<Widget> chidren = <Widget>[];的时候,这里发生了两件事:

  1. 的引用List<Widget> chidren被创建。
  2. 并将一个对象<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'];// 会给你编译时错误。

当涉及到错误时,编译时错误比运行时错误要好得多。


推荐阅读