Flutter/Dart Reflectable包问题:子类无法反射父类成员
解决reflectable包无法反射父类成员的问题
我之前也踩过这个坑!reflectable包的ClassMirror默认只会返回当前类自己声明的成员,不会自动包含从父类继承来的属性或方法——哪怕你已经给父类加了@reflector注解也一样。
解决思路&步骤
- 先确认父类确实被
@reflector标记(你已经做到了这一点,这是获取父类镜像的前提) - 手动获取父类的
ClassMirror,然后将父类的成员与子类的成员合并
完整代码示例
import 'package:reflection_test2/common/reflect/Reflector.dart'; @reflector class Base { String s1; } @reflector class Sub extends Base { String s2; } void main() { // 获取子类的类镜像 ClassMirror subClassMirror = reflector.reflectType(Sub); // 获取父类的类镜像 ClassMirror baseClassMirror = reflector.reflectType(Base); // 提取子类自身的成员 Map<String, DeclarationMirror> subMembers = subClassMirror.declarations; // 提取父类的成员 Map<String, DeclarationMirror> baseMembers = baseClassMirror.declarations; // 合并两类成员(如果子类重写了父类成员,子类的定义会覆盖父类) Map<String, DeclarationMirror> allMembers = {...baseMembers, ...subMembers}; // 现在就能访问包括父类s1在内的所有成员了 print(allMembers.keys); // 输出: (s1, s2) }
进阶优化(多层继承场景)
如果你的类有多层继承关系,可以写一个递归函数自动遍历所有父类,把所有继承的成员都合并进来:
Map<String, DeclarationMirror> getAllMembers(ClassMirror classMirror) { Map<String, DeclarationMirror> members = {...classMirror.declarations}; // 递归遍历父类,合并成员 if (classMirror.superclass != null) { members.addAll(getAllMembers(classMirror.superclass!)); } return members; } // 使用方式 var allSubMembers = getAllMembers(subClassMirror);
这样不管继承链有多长,都能一次性拿到所有成员啦!
内容的提问来源于stack exchange,提问作者Arif
相关产品推荐
相关产品推荐

