data class ObjectClass1(val name: String, val age: Int, val study: String)
data class ObjectClass2(val name: String, val age: Int, val study: String)
data class ObjectClass3(val name: String, val age: Int, val study: String)
class KTDemo15 {
//功能:默认输出一个随机对象,如果此对象和用户指定的对象不一致
//就返回默认对象否则直接返回此对象
inline fun <reified T> randomOrDefault(defaultLambdaAction: () -> T): T? {
val objList: List<Any> = listOf(
ObjectClass1("obj1 张三", 22, "学习C"),
ObjectClass2("obj2 李四", 22, "学习C++"),
ObjectClass3("obj3 王五", 22, "学习C#")
)
val randomObj: Any? = objList.shuffled().first()
println("随机产生的对象是:$randomObj") //随机产生的对象是:ObjectClass2(name=obj2 李四, age=22, study=学习C++)
//如果 it 随机产生的对象 等于 T类型 就会执行 as T?
return randomObj.takeIf { it is T } as T? // null as T? 是可以的
//如果 it 随机产生的对象 不等于 T类型,就会执行下面的
?: defaultLambdaAction()
}
}
fun main(args: Array<String>) {
val finalResult = KTDemo15().randomOrDefault<ObjectClass1> {
println("由于随机产生的对象和我们制定的ObjectClass1不一致,所以返回默认对象")
ObjectClass1("备用 obj 王五", 33, "学习Kotlin")
}
println("调用处的最终结果是:$finalResult")//调用处的最终结果是:ObjectClass1(name=备用 obj 王五, age=33, study=学习Kotlin)
}
Kotlin中reified关键字对于泛型使用
最新推荐文章于 2024-06-12 09:28:19 发布