Kotlin - 如何在子类中返回“自身类型”? (不带扩展功能)

2024-02-28

让我们来学习这些课程:

class A {
    fun foo(): A = this
}

class B: A() {
    fun bar() { ... }
}

现在我希望 Kotlin 能够检测到我何时调用foo on B,然后给我输入的结果B。这样我就可以写:

B().foo().bar()

对于 kotlin 1.4.20,这是不可能的 - 它需要显式转换B after foo().

如果编译器清楚地看到函数返回,也许可以由编译器处理this。或者也许我们可以明确暗示......

class A {
    fun <Self> foo(): Self = this
}

我无法使用扩展函数,因为我需要 Java 类具有这些属性。

我读过这个Kotlin 论坛主题 https://discuss.kotlinlang.org/t/self-types/371/61关于这个话题,但是我没有看到这个案子得到解决。但也许这是暗示的。不管怎样,目前还没有实施。

还有一篇好文章here https://medium.com/@jerzy.chalupski/emulating-self-types-in-kotlin-d64fe8ea2e62.

我已经读过这个问题如何在 Kotlin 中指定“自己的类型”作为返回类型 https://stackoverflow.com/questions/29565043/how-to-specify-own-type-as-return-type-in-kotlin我尝试过“递归类型”方法,但如果我想在子类和基类上使用该类型,则它不起作用:

Type parameter Me of 'HasStatus' has inconsistent values: BaseClass, Subclass

还有其他技巧可以说服 Kotlin 返回类型this如果一个方法返回this?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin - 如何在子类中返回“自身类型”? (不带扩展功能) 的相关文章

随机推荐