首页 > 解决方案 > 万物皆可实现的 Dart 类型

问题描述

我不太清楚如何表达这个,但我基本上想写一个这样的函数:

import 'dart:async';

int countBroadcastStreams(List<Stream<Object>> streams) {
  return streams.where((s) => s.isBroadcast).length;
}

void main() {
  final a = StreamController<int>.broadcast();
  final b = StreamController<String>.broadcast();
  countBroadcastStreams([
    a.stream,
    b.stream,
  ]);
}

这行得通,但是如果我将其中一个StreamControllers 更改为StreamController<Null>然后它不会因为它Null是唯一不继承的类型Object

所以我的问题是:我应该使用哪种类型而不是Object它也可以使用Nulldynamic似乎有效,但这是最好的选择吗?它是否会引入额外的运行时成本?

标签: dart

解决方案


我认为问题不在于Object类型。尝试明确指定 Stream 对象可以为空:

import 'dart:async';

int countBroadcastStreams(List<Stream<Object?>> streams) {
  return streams.where((s) => s != null && s.isBroadcast).length;
}

void main() {
  final a = StreamController<int>.broadcast();
  final b = StreamController<Null>.broadcast();
  print(countBroadcastStreams([
    a.stream,
    b.stream,
  ]));
}

// console log: 2

指定流对象的可为空类型:List<Stream<Object**?**>> streams


推荐阅读