首页 > 解决方案 > 强制将 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

解决方案


我想知道我们是否在 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 的上下文中看到这个


推荐阅读