如何在Dart中通过递归方法计算整数类型的对象深度?
解决Dart递归对象深度计算的编译错误
问题分析
你的代码编译错误是因为三元表达式的类型被Dart推断为num(尽管两个分支都是int),导致1 + num的结果类型为num,无法匹配depth getter声明的int返回类型。
正确实现方式
方案1:使用代码块式getter(推荐)
这种写法逻辑清晰,完全避免类型推断问题:
class MyNode { MyNode? parent; int get depth { if (parent == null) { return 0; // 根节点深度为0 } // 非空断言!确保parent不为null,因为已经通过if判断 return 1 + parent!.depth; } }
方案2:修复三元表达式的类型问题
如果偏好单行写法,可以通过调整逻辑结构消除类型歧义:
class MyNode { MyNode? parent; int get depth => (parent == null) ? 0 : 1 + parent!.depth; }
这里直接调整了逻辑:根节点直接返回0,子节点返回1加上父节点的深度,避免了原写法中1 + (-1)的类型推断隐患,同时通过parent!明确告知编译器parent不为null。
验证效果
- 根节点(
parent为null):返回0,符合预期 - 根节点的子节点:返回1,符合预期
- 更深层级的节点:递归返回正确的深度值
内容的提问来源于stack exchange,提问作者Jemolah
相关产品推荐
相关产品推荐

