如何利用Dart泛型实现:输入可选则返回对应可选类型的函数?
用Dart泛型合并日期转Timestamp函数
当然可以!借助Dart的泛型和可空类型系统,你能把这两个函数合并成一个,让它自动根据输入的可空性返回对应类型的结果。
泛型函数实现方案
下面是合并后的函数,它同时支持非空和可空的DateTime输入,并返回匹配可空性的Timestamp:
static R dateToTimestamp<R, T extends DateTime?>(T dateTime) { if (dateTime == null) { return null as R; } return Timestamp.fromDate(dateTime) as R; }
使用方式
输入非空
DateTime时,指定返回类型为Timestamp:Timestamp timestamp = dateToTimestamp<Timestamp>(DateTime.now());输入可空
DateTime或null时,指定返回类型为Timestamp?:DateTime? nullableDate = DateTime.now(); Timestamp? nullableTimestamp = dateToTimestamp<Timestamp?>(nullableDate); // 直接传入null的情况 Timestamp? nullTimestamp = dateToTimestamp<Timestamp?>(null);
更优雅的扩展方案
如果不局限于单个函数,Dart的扩展语法能实现更简洁的调用体验,无需显式指定泛型参数:
extension DateTimeToTimestamp on DateTime { Timestamp toTimestamp() => Timestamp.fromDate(this); } extension NullableDateTimeToTimestamp on DateTime? { Timestamp? toTimestamp() => this?.toTimestamp(); }
使用时直接调用扩展方法:
// 非空输入 Timestamp ts = DateTime.now().toTimestamp(); // 可空输入 DateTime? nullableDt = DateTime.now(); Timestamp? nullableTs = nullableDt.toTimestamp();
内容的提问来源于stack exchange,提问作者CoocooFroggy
相关产品推荐
相关产品推荐

