Dart 2:Future<void>和Future<Null>之间的区别

15

如果有一个不返回值的异步函数,理想的返回类型是Future<Null>还是Future<void>?或者更具体地说,两者使用的区别是什么?两种方式都是合法的,而且在两种情况下函数的返回值都是解析为nullFuture。以下代码将打印两次null

import 'dart:async';

Future<void> someAsync() async {}
Future<Null> otherAsync() async {}

main() {
    someAsync().then((v) => print(v));
    otherAsync().then((v) => print(v));
}
1个回答

20

Null类型只允许使用null值。

void类型允许任何类型的值,但表示该值不应被使用。

目前我还不确定工具支持如何处理void。可能会有linter规则提示或警告使用void值。

以前在方法/函数的返回类型中仅支持void,因此使用了null代替void


在Dart 2的强类型策略下,使用void来接受任意返回值是不可行的。因此我猜想在未来,使用Future<void>来返回值也将被禁止。另外,Null作为一种类型是没有意义的,所以我猜想它在未来会消失。感谢你的精彩回答。 - Rolando Urquiza
4
“void”将变得更加常见。 “void”允许任何返回值,但是如果调用者使用返回值,则会收到警告。 Dart试图避开障碍,如果“void”不允许任何值,则由于隐式返回,“()= > foo()”将导致错误。请参见eernstg的此评论 - Günter Zöchbauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接