小编poi*_*poi的帖子

Kotlin 数据类中的循环引用可能会产生堆栈溢出错误

我有一个关于 Kotlin 中数据类的问题。
假设我们有两个带有循环引用的类:

data class Foo(
    var bar: Bar? = null
)
Run Code Online (Sandbox Code Playgroud)
data class Bar (
    var foo: Foo? = null
)
Run Code Online (Sandbox Code Playgroud)

和主要功能:

fun main() {
    val f = Foo()
    val b = Bar()
    f.bar = b
    b.foo = f
    f.hashCode()
    b.hashCode()
    //println(f)
    //println(b)
}
Run Code Online (Sandbox Code Playgroud)

Kotlin 自动生成的代码将使 main 函数进入堆栈溢出。你可以在Kotlin Playground试试这个。
这是预期的行为吗?请注意,这是一个基本示例,但这将发生在现实生活中,例如,在 Bar 中,我们可以拥有 List、Set 或 Foo 的泛型集合,而不是对 Foo 的引用。
Kotlin 不应该产生某种编译器错误,或者即使在其他语言中也会发生这种情况?
同样的事情,但在 Java 中

kotlin

5
推荐指数
1
解决办法
158
查看次数

标签 统计

kotlin ×1