Dart面试题更新 2026-08-05

请解释 Dart 语言中的反射机制(Mirrors)具体指什么,并说明在 Flutter 应用开发中为何官方不推荐使用它?

性能优化技术原理技术选型DartFlutter

考察说明

考查对 Dart 反射机制的理解及其在 Flutter 中受限原因的认识。

回答思路

  1. 【回答框架 1】Dart 的反射由 dart:mirrors 库提供,允许在运行时动态获取类型信息、调用方法、访问字段,并支持创建实例。核心类是 MirrorSystem、LibraryMirror、ClassMirror 等。反射能力常用于序列化、依赖注入、动态代理等场景。
  2. 【回答框架 2】Flutter 不推荐使用反射的主要原因是 tree shaking(摇树优化)限制。AOT 编译模式下,反射需要保留大量元数据,导致包体积显著增大,且会禁用部分优化,影响启动性能。
  3. 【回答框架 3】另外,反射在移动端存在平台限制,Web 平台支持有限,且反射调用比直接调用有很大性能损耗,在布局和主线程中使用会造成卡顿。
  4. 【回答框架 4】Flutter 官方推荐使用代码生成(如 build_runner + source_gen)替代反射,在编译期生成具体代码,保留类型安全,减少运行时代价,也利于优化和包体积控制。
  5. 【关键点 1】Dart 反射位于 dart:mirrors 库,用于运行时检查类型和成员。
  6. 【关键点 2】Flutter 的 AOT 编译不支持反射所需的全部元数据,导致包体积增大。
  7. 【关键点 3】反射性能开销高,且在 Web 平台支持有限。
  8. 【关键点 4】建议使用代码生成技术替代反射,如 json_serializable、injectable 等。
  9. 【易错点 1】误以为 Flutter 完全禁止反射,实际是功能受限且不被推荐。
  10. 【易错点 2】将反射用于追求动态性,忽略其对包体积和性能的影响。
  11. 【易错点 3】混淆 dart:mirrors 和 dart:core 的 Object.runtimeType,后者只是获取类型信息,不提供完整反射能力。