在 Dart 中,List.unmodifiable() 和 UnmodifiableListView 有什么不同?

son*_*jhh 8 dart

在 Dart 中,如果要创建不可修改的列表,可以使用 List.unmodifiable() 或 UnmodifiableListView

List<int> list = [1, 2, 3];
List<int> unmodifiableList = List.unmodifiable(list);
UnmodifiableListView unmodifiableListView = UnmodifiableListView(list);
Run Code Online (Sandbox Code Playgroud)

这有什么不同?

jam*_*lin 16

List.unmodifiable是一个List构造函数;它创建一个新List对象。它创建原始的副本List,并且该副本不能改变。改变原件List不会影响副本。

UnmodifiableListView是围绕原件的包装器(“视图”)List,并且原件不能通过UnmodifiableListView. 突变原List仍然在观察UnmodifiableListView

例如:

import 'dart:collection';

void main() {
  var originalList = [1, 2, 3];
  var unmodifiableCopy = List<int>.unmodifiable(originalList);
  var unmodifiableView = UnmodifiableListView(originalList);
  
  originalList[0] = -1;
  print('$unmodifiableCopy'); // Prints: [1, 2, 3]
  print('$unmodifiableView'); // Prints: [-1, 2, 3]
}
Run Code Online (Sandbox Code Playgroud)

  • @jamesdlin 我希望文档这么简单:( (2认同)