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

Ond*_*žka 7 generics subclass self-type kotlin

让我们来学习这些课程:

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

class B: A() {
    fun bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)

现在我希望 Kotlin 能够检测到我何时调用fooB并给出输入为 的结果B。这样我就可以写:

B().foo().bar()
Run Code Online (Sandbox Code Playgroud)

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

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

class A {
    fun <Self> foo(): Self = this
}
Run Code Online (Sandbox Code Playgroud)

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

我已经阅读了关于该主题的Kotlin 论坛帖子,但是我没有看到这个案例得到解决。但也许这是暗示的。不管怎样,目前还没有实施。

这里还有一篇好文章。

我读过这个问题How to指定“自己的类型”作为Kotlin的返回类型,并且我尝试了“递归类型”方法,但是如果我想在子类和基类上都有该类型,它就不起作用:

Type parameter Me of 'HasStatus' has inconsistent values: BaseClass, Subclass
Run Code Online (Sandbox Code Playgroud)

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