Kotlin中reified关键字对于泛型使用

本文介绍了如何使用 Kotlin 中的 dataclass 和 inline fun 函数实现随机生成对象并根据类型判断返回默认值。通过 KTDemo15 类的 randomOrDefault 方法,展示了如何处理不同对象类型并返回定制结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yu-Knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值