具有扩展函数
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
的扩展函数。
现在我设法"覆盖"doSomething
如果一个类扩展了额外的interface C
,就像class X: A, B, C
- 声明另一个扩展函数
fun <T> T.doSomething() where T: A, T: B, T: C
- 在类
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中的方法名称和签名重复