引用 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的扩展函数。

现在我设法"覆盖"doSomething如果一个类扩展了额外的interface C,就像class X: A, B, C

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

如果我在两个"覆盖"函数中直接使用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:类文件Simplest_versionKt中的方法名称和签名重复

最新更新