扩展List <t>类</t>

时间:2012-12-13 09:51:45

标签: dart

是否可以使用我自己的特定列表扩展通用列表。类似的东西:

class Tweets<Tweet> extends List<T>

如果我想用自己的构造函数构造,那么构造函数会是什么样子:

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

然后如何调用父构造函数,因为这不是在扩展类中完成的?

2 个答案:

答案 0 :(得分:4)

这是我发现的扩展列表行为:

  1. import'dart:collection';
  2. 扩展ListBase
  3. 实现[]和长度getter和setter。
  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()并转发来电。