kotlin: 用 is 运算符进行类型检测

一,功能

1,在 Kotlin 中 , 如果不确定一个 实例对象的类型 , 可以 使用 is 运算符进行判定 

实例对象 is 判定类型

判定 实例对象 是否是 判定类型 , 如果是 返回 true , 反之 返回 false 

2,智能转换(Smart Cast):

当通过 is 检查类型后,Kotlin 编译器会自动将对象转换为目标类型(在作用域内)。
适用场景‌:ifwhen 表达式或局部变量等不可变场景。

二,例子

代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            open class Person(val name: String, val age: Int) {
                fun info() {
                    println("name : $name, age : $age")
                }

                open fun sayHello(){
                    println("Hello World")
                }
            }

            class Student : Person("Tom", 18){
                override fun sayHello(){
                    println("Hello World Tom")
                }
            }

            var student = Student()
            var person = Person("Jerry", 12)

            //子类对象属于父类
            println("student is Person : ${student is Person}")
            println("student is Student : ${student is Student}")

            println("person is Person : ${person is Person}")
            //父类对象不属于子类
            println("person is Student : ${person is Student}")
        }

运行结果:

image

三,例子

代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            fun getStringLength(obj: Any): Int? {
                // 在&&右边的`obj`自动转换为String
                if (obj is String && obj.length > 0) {
                    return obj.length
                }
                return null
            }
            println(getStringLength("王富贵是总统秘书"))
            println(getStringLength(false))
            println(getStringLength(100))

            fun describe(obj: Any) = when (obj) {
                is Int -> "Int: $obj"
                is String -> "String: ${obj.length} chars"
                is Boolean -> "Boolean: $obj"
                else -> "Unknown type"
            }

            println(describe("王富贵是总统秘书"))
            println(describe(false))
            println(describe(100))
        }

运行结果:

image

 

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