参考 Kotlin 中的多边界通用接收器扩展函数

Reference to multiple bounds generic receiver extension function in Kotlin

有扩展功能

fun <T> T.doSomething() where T: A, T: B

如果只有一个泛型绑定 A,我可以使用语法 (A::doSomething)(instanceOfA) 来引用该函数,但是如何使用多个绑定来做到这一点?


示例:

interface Ainterface B 以及与两个接口绑定的扩展函数 fun <T> T.doSomething() where T: A, T: B.

现在我设法 "override" doSomething 如果 class 扩展额外的 interface C,比如 class X: A, B, C:

  1. 声明另一个扩展函数fun <T> T.doSomething() where T: A, T: B, T: C
  2. 在 class 中声明 doSomething() X

如果我在两个"override"函数中直接使用doSomething()会导致无限递归。我怎样才能引用原始 fun <T> T.doSomething() where T: A, T: B(如 super.doSomething())?

有点丑,但是

fun <T> T.doSomething() where T: A, T: B = ...

// calls the first version of doSomething
fun <T> T.doSomethingHelper() where T: A, T: B = this.doSomething()

@JvmName("doSomethingElse")
fun <T> T.doSomething() where T: A, T: B, T: C = ... // use doSomethingHelper() here

没有@JvmName我得到

java.lang.ClassFormatError: Duplicate method name&signature in class file Simplest_versionKt