Kotlin 泛型
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
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 泛型的主要内容,如果未能解决你的问题,请参考以下文章