0
点赞
收藏
分享

微信扫一扫

Kotlin 泛型


 基本使用。两个泛型类型处理

class MagicBox<T>(item: T) {
private var subject: T = item
var available = false

//泛型作为返回类型参数
fun fetch(): T? {
//available 为空就返回空 不然就返回实例本身
return subject.takeIf { available }
}

//多泛型参数
/**
* 魔盒里面放的是男孩 取得时候编程男人
*/
fun <R> fetch(subjectModFunction: (T) -> R): R? {
return subjectModFunction(subject).takeIf { available }

}
}

class Boy(val name: String, val age: Int) {}
class Man(val name: String, val age: Int) {}

class Dog(val weight: Int)


fun main() {
val box1 = MagicBox(Boy("Jack", 15))
val box2 = MagicBox(Dog(20))
box1.available = true
box1.fetch()?.run {
println("you find name :$name")
}

var man = box1.fetch {
Man(it.name, it.age.plus(15))
}
println(man?.name)
println(man?.age)
}

Kotlin 泛型_泛型

 

T代表type的意思

R代表retrun的意思。也可以用别的大写字母。但是这个是统一规范

泛型也可以指定父类类型 


<T : Human>


class MagicBox<T : Human>(item: T) {
private var subject: T = item
var available = false

//泛型作为返回类型参数
fun fetch(): T? {
//available 为空就返回空 不然就返回实例本身
return subject.takeIf { available }
}

//多泛型参数
/**
* 魔盒里面放的是男孩 取得时候编程男人
*/
fun <R> fetch(subjectModFunction: (T) -> R): R? {
return subjectModFunction(subject).takeIf { available }

}
}

open class Human(val age: Int)

class Boy(val name: String, age: Int) : Human(age)
class Man(val name: String, age: Int) : Human(age)

class Dog(val weight: Int)


fun main() {
val box1 = MagicBox(Boy("Jack", 15))
val box2 = MagicBox(Dog(20))
box1.available = true
box1.fetch()?.run {
println("you find name :$name")
}

var man = box1.fetch {
Man(it.name, it.age.plus(15))
}
println(man?.name)
println(man?.age)
}

指定后 如果不是父类为Human则会报错

Kotlin 泛型_父类_02

 

举报

相关推荐

0 条评论