Kotlin 是否支持定义一个实现多接口的泛型?


#1

既然“委托模式已经证明是实现继承的一个很好的替代方式”,那么是否可以支持定义一个实现多接口的泛型呢?
如下代码是一个委托的简单实现。

interface Interface {
    fun interfaceFun()
}

class Impl : Interface {
    override fun interfaceFun() {}
}

class Class : Interface by Impl() {

    fun classFun() {}
}

现在需要对 Class 类型并实现了Interface接口的类型添加扩展方法。(以下代码有语法错误,只是表达想法)

/**
 * 泛型 T 为 Class 或其子类,并且实现了 Interface
 */
fun <T : Class & Interface> T.doClassFunAndInterfaceFun() {
    classFun()
    interfaceFun()
}

据我所知,java10支持类似的语法。

public <T extends List<E> & RandomAccess & Cloneable & java.io.Serializable, E>
T createListWithInterfaceT(boolean flag){
 if(flag){
  return (T) new ArrayList<E>();
 }else{
  return (T) new CopyOnWriteArrayList<E>();
 }
 }

#2

在kotlin中,这样写:

fun <F> function() where F: Fragment and F: LifecyclerOwner {
    //your code
}

#3

明白了,谢谢


#4

为啥我用不了?
你的kt版本是多少


#5

这特性很早就有了。他的排版有问题,我给他更了一下,你再试试


#6

真的吗?我之前试的时候不行。就请大神请写一下。


#7

官方文档写的很清楚,仔细阅读一下:

https://kotlinlang.org/docs/reference/generics.html

fun <T> copyWhenGreater(list: List<T>, threshold: T): List<String>
    where T : CharSequence,
          T : Comparable<T> {
    return list.filter { it > threshold }.map { it.toString() }
}

京ICP备16022265号-2 Kotlin China 2017 - 2018