带有/不带有关键字`new`的Dart工厂构造函数,有什么区别?

时间:2018-08-12 02:52:39

标签: dart

我从flutter_redux示例代码中发现了以下代码示例。很难理解为什么factory SearchState.initial()返回一个new关键字,而factory SearchState.loading()factory SearchState.error()却不返回。

class SearchState {
  final SearchResult result;
  final bool hasError;
  final bool isLoading;

  SearchState({
    this.result,
    this.hasError = false,
    this.isLoading = false,
  });

  factory SearchState.initial() =>
      new SearchState(result: SearchResult.noTerm());

  factory SearchState.loading() => SearchState(isLoading: true);

  factory SearchState.error() => SearchState(hasError: true);
}

只是发现Dart语言之旅对这种情况不是很有帮助,而且Dart语言规范太晦涩。

2 个答案:

答案 0 :(得分:5)

effective dart指南中的语录:

  

Dart 2使new关键字为可选。即使在Dart 1中,其含义也是   永远不清楚,因为工厂构造函数意味着可能会进行新的调用   仍然没有真正返回新对象。

     

该语言仍然允许新的语言,以减少迁移   很痛苦,但是请不要使用它,并将其从您的代码中删除。

答案 1 :(得分:2)

没有区别。在Dart 2中,new关键字是可选的。如果调用构造函数时未编写任何内容,则将其隐式假定为new

大多数代码仍然使用new,因为Dart 1要求使用它,有些人甚至更喜欢它,因此您将看到带有和不带有new的代码。