使用Dart语言扩展基本List类和额外功能

Ger*_*_RU 1 inheritance class extend dart

这个问题是关于Dart语言的.我想要一个只是List但具有一些额外功能的类.

例如,我有一个名为Model的类:

class Model{
  String name;
  int type;
  Model(this.name, this.type);
}
Run Code Online (Sandbox Code Playgroud)

我知道Model的类型只能取四个值:从0到3.我希望有一个方法,它可以给我一个指定类型的模型列表,例如List<Model> modelCollection.getByType(int type);.我打算在该类中有四个"隐藏"模型列表(按类型分组).因此,我需要覆盖List元素的添加和删除,以使隐藏列表保持最新.

我怎样才能尽可能简单地实现这一点?

PS我知道这很简单,但我对Object继承不太熟悉并且找不到合适的例子.PPS我也检查了这个,但不知道它是否过时,并没有抓住这个想法.

Ale*_*uin 8

要创建一个类实现List,有几种方法:

import 'dart:collection';

class MyCustomList<E> extends ListBase<E> {
  final List<E> l = [];
  MyCustomList();

  void set length(int newLength) { l.length = newLength; }
  int get length => l.length;
  E operator [](int index) => l[index];
  void operator []=(int index, E value) { l[index] = value; }

  // your custom methods
}
Run Code Online (Sandbox Code Playgroud)
import 'dart:collection';

class MyCustomList<E> extends Base with ListMixin<E> {
  final List<E> l = [];
  MyCustomList();

  void set length(int newLength) { l.length = newLength; }
  int get length => l.length;
  E operator [](int index) => l[index];
  void operator []=(int index, E value) { l[index] = value; }

  // your custom methods
}
Run Code Online (Sandbox Code Playgroud)
import 'package:quiver/collection.dart';

class MyCustomList<E> extends DelegatingList<E> {
  final List<E> _l = [];

  List<E> get delegate => _l;

  // your custom methods
}
Run Code Online (Sandbox Code Playgroud)

根据您的代码,每个选项都有其优点.如果您包装/委托现有列表,则应使用最后一个选项.否则,根据您的类型层次结构使用两个第一个选项中的一个(mixin允许扩展其他对象).