class MagicBox<T : Human>(vararg item: T) {
private var subject: Array<out T> = item
var available = false
//泛型作为返回类型参数
fun fetch(index: Int): T? {
//available 为空就返回空 不然就返回实例本身
return subject[index].takeIf { available }
}
//多泛型参数
/**
* 魔盒里面放的是男孩 取得时候编程男人
*/
fun <R> fetch(index: Int, subjectModFunction: (T) -> R): R? {
return subjectModFunction(subject[index]).takeIf { available }
}
}
说起来泛型比较难以理解。但是可以用Int去理解
定义 (vararg item:Int)
接受(private var subject: Array<out Int> = item)
out关键字暂时不做解释。但是这里可以接受var age 然后转变为一个Array参数。
fun main() {
val box1 = MagicBox(Boy("Jack", 15), Boy("张三", 16), Boy("李四", 17))
box1.available = true
val res=box1.fetch(2) {
Man(it.name, it.age.plus(15))
}
println(res?.name)
println(res?.age)
}
你我都知道。往里面传递一个index 非常的不方便。可以通过重写get函数。来使用[]进行取值
operator fun get(index: Int): T? = subject[index].takeIf { available }
?
?
|