2012-12-13 10 views
6

È possibile estendere un elenco generico con il mio elenco personale specifico. Qualcosa di simile:Estensione dell'elenco <T> classe

class Tweets<Tweet> extends List<T> 

E come farebbe uno sguardo costruttore come, se avessi voluto costruire con il mio costruttore:

Datasource datasource = new Datasource('http://search.twitter.com/search.json'); 
Tweets tweets = new Tweets<Tweet>(datasource); 

E come chiamare il costruttore genitore poi, come questo non viene fatto in una lezione estesa?

+0

C'è una ragione è necessario fare questo invece di utilizzare una lista normale? –

+0

Dupplicate di http://stackoverflow.com/questions/16247045/how-do-i-extend-a-list-in-dart –

risposta

1

Dart's List è una classe astratta con fabbriche.

Penso che si potrebbe implementare in questo modo:

class Tweet { 
    String message; 

    Tweet(this.message); 
} 

class Tweets<Tweet> implements List<Tweet> { 
    List<Tweet> _list; 

    Tweets() : _list = new List<Tweet>(); 

    add(Tweet t) => _list.add(t); 
    addAll(Collection<Tweet> tweets) => _list.addAll(tweets); 
    String toString() => _list.toString(); 
} 


main() { 
    var t = new Tweet('hey'); 
    var t2 = new Tweet('hey'); 

    var tl = new Tweets(); 
    tl.addAll([t, t2]); 

    print(tl); 
} 

non sembra essere un modo diretto per farlo e si presenta come c'è anche un biglietto di bug: http://code.google.com/p/dart/issues/detail?id=2600

Aggiornamento: Un modo è utilizzare noSuchMethod() e inoltrare le chiamate.

+0

Grazie, non sapevo che un 'List' è una classe astratta con le fabbriche. Quando guardo il DartEditor ci sono molti metodi che devono essere implementati. Hmm .. non la soluzione che speravo. – JvdBerg

4

Questo è quello che ho scoperto per estendere il comportamento lista:

  1. import 'freccette: collezione';
  2. extends ListBase
  3. implementazione [] e lunghezza getter e setter.

Vedere l'esempio in basso Tweet adattato. Utilizza il metodo Tweets personalizzato e il metodo dell'elenco standard.

Nota che aggiungi/aggiungi Tutto è stata rimossa.

uscita:

[hello, world, hello] 
[hello, hello] 
[hello, hello] 

Codice:

import 'dart:collection'; 

class Tweet { 
    String message; 

    Tweet(this.message); 
    String toString() => message; 
} 

class Tweets<Tweet> extends ListBase<Tweet> { 

    List<Tweet> _list; 

    Tweets() : _list = new List(); 


    void set length(int l) { 
    this._list.length=l; 
    } 

    int get length => _list.length; 

    Tweet operator [](int index) => _list[index]; 

    void operator []=(int index, Tweet value) { 
    _list[index]=value; 
    } 

    Iterable<Tweet> myFilter(text) => _list.where((Tweet e) => e.message.contains(text)); 

} 


main() { 
    var t = new Tweet('hello'); 
    var t2 = new Tweet('world'); 

    var tl = new Tweets(); 
    tl.addAll([t, t2]); 
    tl.add(t); 

    print(tl); 
    print(tl.myFilter('hello').toList()); 
    print(tl.where((Tweet e) => e.message.contains('hello')).toList()); 
} 
Problemi correlati