通过子类方法访问静态变量

时间:2014-01-12 22:30:13

标签: dart

尝试通过重写的子类访问器访问子类静态变量时,我得到null:

library resource;

abstract class Resource 
{
  String name;
  String description;
  Resource(this.name, this.description);

  Resource.map(Map data)
  {
    ...
    _getDb()[this] = data;
  }

  abstract Map _getDb();
}

class Skill extends Resource
{
  static Map _skills = {}
  Skill.map(Map data) : super.map(data);

  Map_getDb()
  {
    return _skills;
  }
}

import 'resource.dart'

void main() {
  useVMConfiguration();

  test('constructor', () {

    Skill skill = new Skill.map({
                                  'name': 'foo'
                                  });
  }
}

这里我试图在超级构造函数中的(希望)现在构造的子类上调用_getDb()。尽管_skills被实例化,但_getDb()返回null。

这可能吗?

编辑: 在_skills检查this时,_getDb()不存在:

this  Skill [id=0]    
  description "bar" [id=19]  
  name  "foo" [id=18]  

1 个答案:

答案 0 :(得分:1)

你的例子有DartEditor显示的几个缺陷。

Map_getDb()Map_getDb()之间缺少空格 这只是在您的问题或您运行的代码中吗?

abstract Map _getDb();也是语法错误 在Dart中,当您不提供实现时,方法会变为抽象(;而不是{}

修复后,代码运行正常。