在Dart中,如何为Map [key]编写getter和setter?

时间:2013-11-30 03:32:38

标签: class dart getter

为标量创建gettersetter非常简单,但无法弄清楚如何为setter设置Map

// for scalar
String _str = 'hello';
String get str => _str;
String set str(val) => _str = val;

// for Map
Map _map = {};
Map get map[key] => _map[key]; <== Error: function body ...
Map set map[key](val) => _map[key] = val; <=== Error: '(' expected 

似乎要求调用operator[],但这是设置为class

注意:

的问题
Map get map => _map

这样,您就可以在不经过_map的情况下更改setter

1 个答案:

答案 0 :(得分:0)

不确定我是否完全按照您的要求进行操作。听起来你想要一个顶级Map变量,并且能够为[]和[] =运算符提供你自己的实现。

您必须创建一个类来覆盖运算符[]和[] =。但是你仍然可以实现你所要求的(我认为?)。在我的头顶,这看起来像这样。

Map _map = new MyMap();

Map get map =>  _map;

set map(Map m) {
    _map = new MyMap.from(m);
}

class MyMap<K,V> implements Map {
    MyMap.from(Map<K, V> other) => ...;
    V operator [](K key) => ...;
    operator []=(K key, V value) => ...;
    ... other members
}