到目前为止,我找到的答案可能是“否”,但我想知道将来是否有任何计划支持此功能。这就是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)!")
}
答案 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}!")
}