kotlin - 强制将 null 转换为不可为 null 的类型
问题描述
有没有办法通过某种“我知道我在做什么”将 null 变成不可为 null 的类型?
我想做一个双向链表:
data class Node(var prev: Node, var next: Node, val value: Int)
我可以保证这个列表在任何时候都至少有两个元素,除了初始化期间,在添加第一个节点之后但在第二个节点之前。我想保证 prev 和 next 永远不会为空。
我想我会尝试的一件事是编写一个初始化第一个和第二个节点的特殊构造函数constructor(v1: Int, v2: Int) : this(Node(this, this, v1), v2)
,但这不起作用,因为this
在进入正文之前我无法做任何事情。
解决方案
我想知道我们是否在 kotlin 中做同样的冒险代码难题
我使用了 lateinit 属性来允许弹珠改变它作为链表中节点的位置
class Marble(val marbleNumber: Long) {
lateinit var counterClockwiseMarble: Marble
lateinit var clockwiseMarble: Marble
}
最初与二传手
class Marble(val marbleNumber: Long) {
lateinit var counterClockwiseMarble: Marble
private set
lateinit var clockwiseMarble: Marble
private set
fun setCounterClockwise(m: Marble) {
this.counterClockwiseMarble = m
}
fun setClockwise(m: Marble) {
this.clockwiseMarble = m
}
}
但是当使用受到足够的控制以确保安全时,这似乎是很多文本
如果是同一个谜题,你可以在 github 的上下文中看到这个
推荐阅读
- mysql - 分组和删除除了 SQL 中的一列之外的重复项
- c - 让我的结构实例将某些数字“翻译”成某些字符串
- python - 重命名数据框列
- jupyter-lab - 谷歌云AI笔记本保存不起作用
- javascript - Heroku 无法启动我的 app.js(代码 H10 状态 503)
- typo3 - 在打字稿的renderObject中获取altText
- html - 当我悬停社交图标时出现一个意想不到的 div
- jmeter - 查找 JMETER 使用的 JRE
- alert - 基于来自 AWS Cloudwatch 日志组的应用程序错误日志的警报
- django - 使用基于类的视图更新表单集