有没有办法将null堵塞到一个非可空类型中,某种“我知道我在做什么”?
我想制作一个双重链表:
data class Node(var prev: Node, var next: Node, val value: Int)
我可以保证这个列表在初始化之后,在添加第一个节点之后但在第二个节点之前,始终至少有两个元素 . 我想保证prev和next永远不会为null .
我认为我会尝试的一件事是编写一个特殊的构造函数来初始化第一个和第二个节点 constructor(v1: Int, v2: Int) : this(Node(this, this, v1), v2)
,但是在进入正文之前不会对 this
做任何事情 .
3 回答
我可以创建具有无效支持字段的属性 .
然后可以通过初始化
我希望学习开销可以减少一点,但这比null-able next / prev更好 .
我'm wondering if we'在kotlin做同样的adventofcode puzzle
我使用lateinit属性来允许大理石更改其作为链接列表中的节点的位置
最初是与二传手
但是当使用控制得足够安全时,这似乎是很多文本
如果是同一个谜题你可以see this used in context on github
您可以通过提供接口或
sealed class
来抽象Node
保持其引用的方式 .这种方法将抵消您对可空类型的需求 . 它不是非常高效,而是一种获得编译时类型安全性的声明方式 .