gpt4 book ai didi

generics - 如何解决 Kotlin 中违反有限界限制的问题?

转载 作者:IT老高 更新时间:2023-10-28 13:39:49 26 4
gpt4 key购买 nike

假设我在 Java 中有这个声明,没关系。

abstract class Start<T extends End> {
public T end;
}

abstract class End<T extends Start> {
public T start;
}

但是,在 Kotlin 中不行,因为 Kotlin 对“循环”类型参数有限制。

abstract class Start<T : End<*>> {
lateinit var end: T
}

abstract class End<T : Start<*>> {
lateinit var start: T
}

在 Kotlin 中是否有任何方法可以解决这个问题,以便我可以拥有相互依赖的泛型类型?

最佳答案

不可能只使用一个类型参数。引入 Self 类型,这是一些其他语言原生支持的,是必要的。但是,在 kotlin 中,您必须自己引入 Self 类型,因为 JetBrains officially turned down the request of adding self type .

abstract class Start<Self: Start<Self, T>, T: End<T, Self>> {
lateinit var end: T
}

abstract class End<Self: End<Self, T>, T: Start<T, Self>> {
lateinit var start: T
}

PS:这个 Self 以后可能会导致冗长的类型。谨慎行事。

关于generics - 如何解决 Kotlin 中违反有限界限制的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46682455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com