引用Kotlin中的多边界通用接收器扩展功能

时间:2019-01-24 16:59:00

标签: generics kotlin kotlin-extension

具有扩展功能

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. 在类doSomething()中声明X

如果我在两个“ override”函数中直接使用doSomething(),将导致无限递归。如何引用原始的fun <T> T.doSomething() where T: A, T: B(如super.doSomething())?

1 个答案:

答案 0 :(得分:0)

有点难看,但是

$total = (isset($_POST['total']))?$_POST['total']:'';

没有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 我得到

  

java.lang.ClassFormatError:类文件Simplest_versionKt中的方法名称和签名重复