【发布时间】:2016-03-05 17:21:47
【问题描述】:
我创建了一个辅助方法buildChain,它本质上创建了一个
对象链,因为它们实现了接口IChain<T>
并设置合约next成员
守则
interface Chain<T> {
var next: T?
operator fun plus(next: T): T?
}
fun <T : Chain<T>> buildChain(first: T, vararg members: T): T {
var next: T? = null
members.forEachIndexed { i, t ->
if (i == 0) {
next = first + t
} else {
next = next?.run { this + t }
}
}
return first
}
实现示例
data class Person(val name: String) : Chain<Person> {
override var next: Person? = null
override fun plus(next: Person): Person? {
this.next = next
return next
}
}
fun createPersonChain()
= buildChain(Person("Bob"), Person("Bitzy"), Person("Blitzy"))
实现输出示例
@JvmStatic fun main(args: Array<String>) {
var first = createPersonChain()
// first.name = "Bob"
// first.next.name = "Bitzy"
// first.next.next.name = "Blitzy"
}
是否有functional 或simpler 方式来实现上述code 并保持实现使用相同?
【问题讨论】:
标签: kotlin