Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extending the List<T> class [duplicate]

Tags:

dart

Is it possible to extend a generic list with my my own specific list. Something like:

class Tweets<Tweet> extends List<T>

And how would a constructor look like, if I wanted to construct with my own constructor:

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

And how to call the parent constructor then, as this is not done in a extended class?

like image 477
JvdBerg Avatar asked Dec 13 '12 09:12

JvdBerg


1 Answers

This is what i found out to extend list behavior:

  1. import 'dart:collection';
  2. extends ListBase
  3. implement [] and length getter and setter.

See adapted Tweet example bellow. It uses custom Tweets method and standard list method.

Note that add/addAll has been removed.

Output:

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

Code:

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());
}
like image 188
Nico Avatar answered Oct 13 '22 11:10

Nico