2013-01-21 2 views
3

J'essaie de comprendre comment je peux créer une collection personnalisée d'objets personnalisés à Dart et ayant Liste comme une classe abstraite, je ne vois pas d'autre moyen que d'un « nantie » Liste dans ma collection personnalisée:Collection personnalisée en Dart?

class MenuItemCollection { 

    List<MenuItem> _items; 

    MenuItemCollection() { 
    _items = new List<MenuItem>(); 
    } 

    List<MenuItem> get items => _items; 
} 

Y a-t-il une meilleure façon de faire cela?

+3

Malheureusement il n'y a pas moyen d'étendre encore la liste. Voici le bug à mettre en vedette pour voter pour cette fonctionnalité: http://code.google.com/p/dart/issues/detail?id=2600 –

+0

Seth, est-ce que cela signifie ne pas pouvoir étendre la liste est considéré comme un bug? Je pensais que c'était par conception? –

Répondre

3

Vous pouvez faire quelque chose comme:

class MenuItemCollection implements List<MenuItem> { 
    final _list = new List<MenuItem>(); 
    MenuItemCollection(); 

    noSuchMethod(InvocationMirror invocation) => invocation.invokeOn(_list); 
} 
+2

Vous pouvez également utiliser noSuchMethod pour tout attraper et transférer vers la liste encapsulée :) Quelque chose comme class EdgeList { final list = new ArrayList (); noSuchMethod (mirror) => mirror.invokeOn (liste); } –

+0

Merci! J'ai mis à jour la réponse. –

+0

L'avez-vous testé? Je n'ai pas essayé :) –

0

Vous pouvez utiliser

Liste < E>

Queue < E>

Set < E>

ou tout simplement un tableau E[]

La meilleure approche consiste à utiliser le cadre de collection (donc les 3 premières options). Mais si vous voulez, vous pouvez même créer un tableau récursif.

Questions connexes