美文网首页
kotlin reified关键字(备用机制)

kotlin reified关键字(备用机制)

作者: Bfmall | 来源:发表于2022-11-23 17:06 被阅读0次
/**
 * DESC   : reified关键字(具体化)备用机制
 */
const val KtBaseReifiedTest01_TAG = "KtBaseReifiedTest01"

data class ObjectClass01(val name: String, val age: Int)
data class ObjectClass02(val name: String, val age: Int)
data class ObjectClass03(val name: String, val age: Int)
data class ObjectClassDefault(val name: String, val age: Int)

class KtBaseReifiedTest01 {

    inline fun <reified T> testReified01(defaultLambdaAction : () -> T) : T? {
        val objectList : List<Any> = listOf(ObjectClass01("zhangsan", 10),
            ObjectClass02("lisi", 11), ObjectClass03("wangwu", 12))
        val randomObj : Any? = objectList.shuffled().first()

        //testReified01==>objClass=ObjectClass03(name=wangwu, age=12)
        //testReified01==>objClass=ObjectClass01(name=zhangsan, age=10)
        Log.d(KtBaseReifiedTest01_TAG, "testReified01==>randomObj="+randomObj)
        //如果objClass为空,备用返回defaultLambdaAction()方法返回的对象(因加入了reified关键字)
        //1.类型转换as T和as T?是不同的,
        //2.randomObj is T如果返回false,那么randomObj.takeIf也会返回null,
        //3.如果as T不加问号,接着判断null as T会奔溃(null 不能转换成 T 类型),所以防止崩溃,改成as T?
        //2.改成as T?后,接着2步骤,null as T?可为空,走defaultLambdaAction逻辑
        return randomObj.takeIf { randomObj is T } as T? ?: defaultLambdaAction()
    }

}

相关文章

网友评论

      本文标题:kotlin reified关键字(备用机制)

      本文链接:https://www.haomeiwen.com/subject/cqaazrtx.html