是否可以使用我自己的特定列表扩展通用列表。类似的东西:
class Tweets<Tweet> extends List<T>
如果我想用自己的构造函数构造,那么构造函数会是什么样子:
Datasource datasource = new Datasource('http://search.twitter.com/search.json');
Tweets tweets = new Tweets<Tweet>(datasource);
然后如何调用父构造函数,因为这不是在扩展类中完成的?
答案 0 :(得分:4)
这是我发现的扩展列表行为:
参见改编后的推文示例。它使用自定义推文方法和标准列表方法。
请注意,add / addAll已被删除。
输出:
[hello, world, hello]
[hello, hello]
[hello, hello]
代码:
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());
}
答案 1 :(得分:1)
Dart的List
是一个带工厂的抽象类。
我认为你可以像这样实现它:
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);
}
似乎没有任何直接的方法可以做到这一点,看起来还有一张错误票:http://code.google.com/p/dart/issues/detail?id=2600
更新:一种方法是使用noSuchMethod()
并转发来电。