Menu
CoddyTech

回顾:泛型存储

本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 69 课,共 110 课。

challenge icon

挑战

简单

让我们构建一个泛型存储系统,把你学过的集合和泛型知识结合起来!你将创建一个 Storage<T> 类,用来存储任意类型的项、获取这些项,并通过 for-in 循环遍历它们。

你会把代码分成两个文件:

  • storage.dart:创建包含两个类的泛型存储系统:
    • 创建一个 StorageIterator<T> 类,实现 Iterator<T>,以便遍历存储的项
    • 创建一个 Storage<T> 类,继承 Iterable<T>,并具备以下功能:
      • 使用私有列表在内部保存项
      • 提供一个 add(T item) 方法,用于存储新项
      • 提供一个 getAt(int index) 方法,返回给定索引处的项
      • 提供一个 count getter,返回存储项的数量
      • 提供一个 iterator getter,返回用于遍历所存储项的 StorageIterator
  • main.dart:导入存储文件,并使用不同类型演示泛型存储:
    • 创建一个 Storage<String>,并添加三个城市名称:'Paris'、'Tokyo'、'Sydney'
    • 打印项的数量
    • 打印索引为 1 的项
    • 使用 for-in 循环逐行打印每个城市
    • 打印一个空行
    • 创建一个 Storage<int>,并添加四个数字:100、200、300、400
    • 使用 where 方法筛选出大于 150 的值,然后打印筛选结果列表

你的存储系统应能与任意类型无缝配合,同时保持完整的类型安全。由于它继承了 Iterable,因此会自动获得对 where、map 和 fold 等强大方法的使用权限!

预期输出:

Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney

[200, 300, 400]

亲手试试

import 'storage.dart';

void main() {
  // TODO: 为城市创建一个 Storage<String>
  // 添加三个城市:'Paris'、'Tokyo'、'Sydney'

  // TODO: 打印元素数量(格式:"Count: X")

  // TODO: 打印索引为 1 的元素(格式:"Item at 1: X")

  // TODO: 使用 for-in 循环,每行打印一个城市

  // TODO: 打印一个空行
  print('');

  // TODO: 为数字创建一个 Storage<int>
  // 添加四个数字:100、200, 300, 400

  // TODO: 使用 where 方法筛选大于 150 的值
  // 然后使用 toList() 打印结果列表
}

面向对象编程中的所有课

自己练习: Dart 在线编译器