参考 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 A
、interface B
以及与两个接口绑定的扩展函数 fun <T> T.doSomething() where T: A, T: B
.
现在我设法 "override" doSomething
如果 class 扩展额外的 interface C
,比如 class X: A, B, C
:
- 声明另一个扩展函数
fun <T> T.doSomething() where T: A, T: B, T: C
- 在 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
有扩展功能
fun <T> T.doSomething() where T: A, T: B
如果只有一个泛型绑定 A
,我可以使用语法 (A::doSomething)(instanceOfA)
来引用该函数,但是如何使用多个绑定来做到这一点?
示例:
interface A
、interface B
以及与两个接口绑定的扩展函数 fun <T> T.doSomething() where T: A, T: B
.
现在我设法 "override" doSomething
如果 class 扩展额外的 interface C
,比如 class X: A, B, C
:
- 声明另一个扩展函数
fun <T> T.doSomething() where T: A, T: B, T: C
- 在 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