dart - 万物皆可实现的 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,
]);
}
这行得通,但是如果我将其中一个StreamController
s 更改为StreamController<Null>
然后它不会因为它Null
是唯一不继承的类型Object
。
所以我的问题是:我应该使用哪种类型而不是Object
它也可以使用Null
?dynamic
似乎有效,但这是最好的选择吗?它是否会引入额外的运行时成本?
解决方案
我认为问题不在于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
。
推荐阅读
- reactjs - UseEffect 中的异步生成器 - 如何取消订阅更新
- node.js - 如果任何值与集合中的数组元素匹配,则查找记录
- r - R组合字符串以循环访问对象
- mongodb - 如何在部署集中添加具有 mongodb 数据库的持久性卷声明,以供部署在 kubernetes 中的 nodejs 微服务使用
- reactjs - React Typescript:类型参数不可分配给类型参数
- javascript - 使用 JsPDF 将多个 Highcharts 图形导出到单个 PDF
- rest - groovyx.net.http 缺少 RESTClient
- c++ - 如何将子类的对象添加到抽象基类的动态数组中?
- ios - IOS:无法从 CryptoKit SecureEnclave 私钥创建 SecKey 表示(OSStatus 错误 -50 - 从数据创建 EC 私钥失败))
- amazon-web-services - LaunchTemplate - ec2:runinstances 抛出错误未授权操作