kotlin: 泛型:reified获取类型信息

一,功能:

关键字reified

关键字 reified 可以让你在运行时访问在代码编译期间应该被擦除的类型信息。reified 关键字使用内联函数来执行这个任务。

如果一个函数被标记为 inline,那么无论在哪里调用该函数,编译器都会将整个函数体直接粘贴到调用处。

 

二,例子:

代码:

inline fun <reified T> displayValue2(value: T) {
    println(value)
    println("T类型: ${T::class.simpleName}")
    println("T类型: ${T::class.java}")
}

调用:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            fun <T> displayValue(value: T) {
                println(value)
                println("类型:"+value!!::class.simpleName)
            }

            displayValue<String>("Generics")
            displayValue<Int>(10)

            displayValue("Generics2")
            displayValue(20)

            displayValue2("Generics3")
            displayValue2(30)
        }

运行结果:

image

三,例子:

代码:

fun <T> isString1(obj: Any): Boolean {
    //return obj is T // ❌ 编译报错:Cannot check for instance of erased type T
    return true
}

// 用 reified + inline(运行时能看清 T 的真身)
inline fun <reified T> isString2(obj: Any): Boolean {
    return obj is T // ✅ 能正确判断
}

调用:

        //处理按钮点击事件
        binding.button2.setOnClickListener {

            // 使用:
            println(isString2<String>("hello")) // 输出:true
            println(isString2<Int>("hello"))    // 输出:false

        }

运行结果:

image

 

posted @ 2025-09-06 08:38  刘宏缔的架构森林  阅读(7)  评论(0)    收藏  举报