我正在从Map数据动态创建对象,填充字段以匹配键名.在父项上定义字段时会出现问题,尝试在父字段上设置值会产生错误:
No static setter 'name' declared in class 'Skill'.
NoSuchMethodError : method not found: 'name'
Run Code Online (Sandbox Code Playgroud)
码:
class Resource {
String name;
String description;
Resource.map(Map data)
{
ClassMirror c = reflectClass(runtimeType);
ClassMirror thisType = c;
while(c != null)
{
for (var k in c.declarations.keys) {
print('${MirrorSystem.getName(k)} : ${data[MirrorSystem.getName(k)]}');
if(data[MirrorSystem.getName(k)] != null)
{
thisType.setField(k, data[MirrorSystem.getName(k)]);
}
}
c = c.superclass;
}
}
}
class Skill extends Resource
{
Skill.map(data) : super.map(data);
}
Run Code Online (Sandbox Code Playgroud)
您应该使用a ObjectMirror在对象上设置字段.您的代码尝试设置一个ClassMirror尝试定义静态变量的字段.
class Resource {
String name;
String description;
Resource.map(Map data)
{
ObjectMirror o = reflect(this); // added
ClassMirror c = reflectClass(runtimeType);
ClassMirror thisType = c;
while(c != null)
{
for (var k in c.declarations.keys) {
print('${MirrorSystem.getName(k)} : ${data[MirrorSystem.getName(k)]}');
if(data[MirrorSystem.getName(k)] != null)
{
// replace "thisType" with "o"
o.setField(k, data[MirrorSystem.getName(k)]);
}
}
c = c.superclass;
}
}
}
class Skill extends Resource
{
Skill.map(data) : super.map(data);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |