首页 > 解决方案 > 列表/数组初始化的更好实践

问题描述

在创建非空空列表或数组时,建议在这两者之间。

List newList = List();
List<Obstacle> obstacles = List<Obstacle>();

或者

List newList = [];
List<Obstacle> obstacles = [];

或者它们都做完全相同的事情并对处理和记忆产生相同的影响。

标签: flutterdart

解决方案


声明式与文字构造函数

[]据我所知,使用文字构造函数和声明性构造函数之间没有任何区别List()

两者都有相同的结果,但我建议您使用声明式List()构造函数。因为字面量构造函数用于预定义列表中的一些值。喜欢:List myList = [1,2,3];

因此,如果要创建非空列表,请使用:

List myList = List();

但是,如果您想为列表定义一些初始值,请使用文字构造函数:

List myList = [1,2,3];

泛型

快速信息:列表是泛型,地图也是泛型。

泛型基本上是当您想要将对象类型作为参数传递给类或函数或类型定义时。聪明的程序员使用它来编写可重用的代码。

例如,我有一个Response在我的应用程序中使用的类,Response该类有一个数据变量。但我希望它能够告诉 DartResponse类在哪里携带data类型String或数据类型int

所以为了实现这一点,我会让我的Response班级成为Generic.

这是一个通用响应类的示例。数据变量可以根据需要在我的应用程序中的任何情况下设置。

Response<String> response = Response<String>();

//Defining a Generic's type is optional.
//So both statements work.
Response response = Response();

class Response<T> {
  T data;
}

为什么是泛型? 这样你就得到了 Dart 惊人的静态编译安全特性。泛型提供了在多种情况下重用类的灵活性,但仍为您提供强大的编译安全性。

因此,在声明 a 时,List如果您定义它是 a List<int>。编译器将确保您不会意外尝试String在其中插入 a。


推荐阅读