dart でより専門的なリストを作成したい。Listを直接拡張することはできません。私のオプションは何ですか?
質問する
10938 次
6 に答える
36
クラスにListを実装させるには、いくつかの方法があります。
- ListBaseの拡張と
length
、operator[]
、operator[]=
およびの実装length=
:
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
}
- Mixin ListMixin
length
と、operator[]
、operator[]=
およびの実装length=
:
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
}
- quiver パッケージから
List
の委任:DelegatingList
import 'package:quiver/collection.dart';
class MyCustomList<E> extends DelegatingList<E> {
final List<E> _l = [];
List<E> get delegate => _l;
// your custom methods
}
- コレクション パッケージから
List
の委任:DelegatingList
import 'package:collection/wrappers.dart';
class MyCustomList<E> extends DelegatingList<E> {
final List<E> _l;
MyCustomList() : this._(<E>[]);
MyCustomList._(l) :
_l = l,
super(l);
// your custom methods
}
コードに応じて、これらのオプションにはそれぞれ利点があります。既存のリストをラップ/デリゲートする場合は、最後のオプションを使用する必要があります。それ以外の場合は、型階層に応じて最初の 2 つのオプションのいずれかを使用します (別のオブジェクトを拡張できる mixin)。
于 2013-08-29T10:09:41.403 に答える
18
dart:collection には ListBase クラスがあります。このクラスを拡張する場合、実装する必要があるのは次のとおりです。
get length
set length
[]=
[]
次に例を示します。
import 'dart:collection';
class FancyList<E> extends ListBase<E> {
List innerList = new List();
int get length => innerList.length;
void set length(int length) {
innerList.length = length;
}
void operator[]=(int index, E value) {
innerList[index] = value;
}
E operator [](int index) => innerList[index];
// Though not strictly necessary, for performance reasons
// you should implement add and addAll.
void add(E value) => innerList.add(value);
void addAll(Iterable<E> all) => innerList.addAll(all);
}
void main() {
var list = new FancyList();
list.addAll([1,2,3]);
print(list.length);
}
于 2013-04-27T00:34:30.363 に答える
-2
//list is your given List and iterable is any object in dart that can be iterated
list.addAll(Iterable)
于 2020-03-29T10:08:28.523 に答える