Flutter如何在确定实例非空时移除类型声明后的问号?
解决Dart函数返回非空类型的问题
要移除返回类型和变量声明后的问号,同时保证类型安全,你可以按以下方式调整代码:
- 修改函数返回类型:把
ChapterInfo?改为ChapterInfo,明确函数要么返回有效对象,要么抛出异常。 - 完善null分支逻辑:在
info == null的代码块中,必须要么找到有效ChapterInfo赋值给info,要么直接抛出异常。Dart的控制流分析会自动识别:如果代码能执行到返回语句,info一定不为null。 - 直接返回变量:无需用
!强制断言非空,因为流分析已经确认此时info的非空状态。
修改后的代码示例:
Map<int, ChapterInfo> _chapterInfoMap = HashMap(); ChapterInfo getChapterInfo(int id) { ChapterInfo? info = _chapterInfoMap[id]; if (info == null) { // 执行额外查找逻辑,比如从本地存储或网络获取 info = _getChapterInfoFromBackup(id); // 若查找后仍为空,抛出异常终止流程 if (info == null) { throw Exception("无法获取ID为$id的章节信息"); } } return info; } // 示例备份查找方法 ChapterInfo? _getChapterInfoFromBackup(int id) { // 实现具体查找逻辑 }
如果不需要额外查找,直接在null分支抛出异常,还可以简化成更紧凑的写法:
Map<int, ChapterInfo> _chapterInfoMap = HashMap(); ChapterInfo getChapterInfo(int id) { return _chapterInfoMap[id] ?? throw Exception("无法获取ID为$id的章节信息"); }
这样调整后,函数返回类型就能安全去掉问号,Dart的类型系统也会严格保证返回值非空。
内容的提问来源于stack exchange,提问作者暮光之城管
相关产品推荐
相关产品推荐

