Kotlin是否支持或将来制定类似于Swift中协议组成的接口组成计划?

时间:2019-02-24 00:39:06

标签: swift kotlin

到目前为止,我找到的答案可能是“否”,但我想知道将来是否有任何计划支持此功能。这就是Swift中的样子。

  

协议组成具有SomeProtocol和AnotherProtocol的形式。您可以根据需要列出任意数量的协议,并用&分隔。除了协议列表以外,协议组成还可以包含一个类类型,您可以使用它来指定所需的超类。

protocol Named 
{
    var name: String { get }
}

protocol Aged 
{
    var age: Int { get }
}

func wishHappyBirthday(to celebrator: Named & Aged) 
{
    print("Happy birthday, \(celebrator.name), you're \(celebrator.age)!")
}

2 个答案:

答案 0 :(得分:2)

您不能在Kotlin中显式定义交集类型,但是可以使用泛型类型约束在函数参数中实现它。像这样:

interface Named {
    val name: String
}

interface Aged {
    val age: Int
}

fun <T> wishHappyBirthday(celebrator: T) where T : Named, T : Aged {
    println("Happy birthday, ${celebrator.name}, you're ${celebrator.age}!")
}

答案 1 :(得分:0)

Kotlin接口与Swift协议并不完全等效:)特别是,接口不能有条件地实现或不能作为扩展添加。但是add type classes to Kotlin正在进行中的工作将提供缺少的功能。和他们在一起,你会写

fun <T> wishHappyBirthday(celebrator: T, with Named<T>, with Aged<T>) {
    println("Happy birthday, ${celebrator.name}, you're ${celebrator.age}!")
}