让我们来学习这些课程:
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
?