2013-08-27 54 views
1

此問題與Dart語言有關。 我想要一個僅僅是一個List但有一些額外功能的類。在Dart語言中擴展具有額外功能的基類列表類

比如我有一個名爲模型類:

class Model{ 
    String name; 
    int type; 
    Model(this.name, this.type); 
} 

我知道模型的類型可能只需要四個值:從0到3 而且我希望有一個方法,它可以給我一個指定類型的模型列表,例如List<Model> modelCollection.getByType(int type);。 我打算在該類中有四個「隱藏」模型列表(按類型分組)。 因此,我需要重寫列表元素的添加和刪除,以使隱藏列表保持最新狀態。

我怎樣才能認識到這一點儘可能簡單?

P.S.我知道這很簡單,但我很不熟悉Object繼承,找不到合適的例子。 P.P.S.我也檢查了這一點,但不知道它是否過時,並沒有理解。

+0

可能的重複[如何在Dart中擴展列表?](http://stackoverflow.com/questions/16247045/how-do-i-extend-a-list-in-dart) –

回答

7

若要使類實現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 
} 
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 
} 
import 'package:quiver/collection.dart'; 

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

    List<E> get delegate => _l; 

    // your custom methods 
} 

根據代碼每一個選項都有各自的優點。如果您打包/委託現有列表,則應使用最後一個選項。否則根據您的類型層次結構使用兩個第一個選項之一(mixin允許擴展另一個對象)。

+0

謝謝,我是第一個! –

1

你可能會感興趣quiver.dart的Multimap。它的行爲就像一個允許每個鍵具有多個值的Map。

這裏是在GitHub上的代碼:https://github.com/google/quiver-dart/blob/master/lib/src/collection/multimap.dart#L20

它是在酒吧簡單地顫動。我們將很快在某處舉辦dartdocs。

+0

在我的情況下我需要精確地擴展List類,因爲Web UI模板迭代對列表很有用,但對於地圖來說有些棘手。 –

+0

Maps和Multimap也有一個'values'屬性,您可以迭代,因此'