Kotlin中如何在二级构造函数初始化TreeNode的children为空列表
Kotlin泛型TreeNode数据类正确实现方式
你的代码存在两个关键问题:
- 二级构造函数的参数类型声明错误:
emptyList<TreeNode<T>>不是合法的类型,参数类型应写为List<TreeNode<T>>,emptyList()是该类型的实例而非类型本身。 - 主构造函数调用不完整:主构造要求传入
value和children两个参数,你写的this(value)缺少第二个必填参数。
修正后的二级构造函数写法
data class TreeNode<T>( val value: T, val children: List<TreeNode<T>> ) { // 二级构造:仅传入value时,自动将children初始化为空列表 constructor(value: T) : this(value, emptyList()) }
更简洁的Kotlin风格写法(推荐)
其实无需额外编写二级构造,直接给主构造的children参数设置默认值,更符合Kotlin的设计习惯:
data class TreeNode<T>( val value: T, val children: List<TreeNode<T>> = emptyList() )
使用时既可以传入完整参数,也可以只传value:
// 创建仅含value的节点 val singleNode = TreeNode("Hello") // 创建带子节点的父节点 val parentNode = TreeNode("Parent", listOf(TreeNode("Child1"), TreeNode("Child2")))
内容的提问来源于stack exchange,提问作者QuintessentialGamer
相关产品推荐
相关产品推荐

