簡體   English   中英

Class.new 在 Dart 中做了什么

[英]What does Class.new do in Dart

我目前正在與 Riverpod 處理 Flutter 等。 在其中一個示例中,我遇到了以下代碼行。
最終 repositoryProvider = Provider(MarvelRepository.new);

final repositoryProvider = Provider(MarvelRepository.new);

class MarvelRepository {
  MarvelRepository(
    this.ref, {
    int Function()? getCurrentTimestamp,
  }) : _getCurrentTimestamp = getCurrentTimestamp ??
            (() => DateTime.now().millisecondsSinceEpoch);
  
  final Ref ref;
  final int Function() _getCurrentTimestamp;
  final _characterCache = <String, Character>{};
  ...
  ...
  ...
}

我想知道這個“新”屬性是如何在這里工作的。 我試圖在文檔和規范中找到一些東西。
我構建了一個簡單的 class 來檢查代碼。

class User {
      User();
      final String name = "MisterX";
      final String email = "misterx@gmail.com";
}
void main() {
  
    final x = User.new;
    final z = x();   
    print(z.email);
   
}

'x' 現在在我看來是一個新的 class ,我可以用它創建更多實例。
但這里實際發生了什么?

為什么我可以使用它來創建另一個提供程序實例?

有什么區別:
final repositoryProvider = Provider((ref) => MarvelRepository(ref));

final repositoryProvider = Provider<MarvelRepository>((ref) => MarvelRepository(ref));

class MarvelRepository {
  MarvelRepository(
    this.ref, {
    int Function()? getCurrentTimestamp,
  }) : _getCurrentTimestamp = getCurrentTimestamp ??
            (() => DateTime.now().millisecondsSinceEpoch);
  
  final Ref ref;
  final int Function() _getCurrentTimestamp;
  final _characterCache = <String, Character>{};
  ...
  ...
  ...
}

這是在“marvel.dart”中找到的示例

.new是一種將引用傳遞給構造函數的方法。 它不會創建新的 class。 它與 class 的默認構造函數相同。 這也稱為構造函數撕裂。 它是在 Dart 2.15 中引入的。 你可以在這里讀更多關於它的內容:

宣布 Dart 2.15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM