zoukankan      html  css  js  c++  java
  • kotlin中类型检查和类型转换

    is 和!is操作符,可以在运行时检查一个对象与一个给定的类型是否一致,或者使用与它相反的!is操作符

    fun main(arg: Array<String>) {
    
        var a :Any= 1
        if (a is String) {
            print("是String")
        }
        if (a is Int) {
            print("是Int")
        }
    }
    

     智能类型的转换

    fun main(arg: Array<String>) {
    
        demo("5")
    
        var x :Any = "a"
        when(x){
            is Int-> print(x+1)
            is String-> print(x.length+1)
            is IntArray-> print(x.sum())
        }
    }
    fun demo(x:Any){
        if (x is String){
            print(x.length)//x 被自动转换为String类型
        }
    }
    
    //智能转换的前提条件:
    //  1.局部的val变量:永远有效
    //  2.val属性:如果属性是private的或者internal的或者类型检查处理与属性定义出现在同一个模块内,那么智能类型转换时有效的.对于opnefire属性,活存在自定义get方法
    //      智能转换类型是无效的
    //  3.局部的var变量:如果在类型检查语句与变量使用语句直接,变量没有被改变,而且它没有被lambda表达式捕获并在lambda表达式内修改它,那么智能类型转换时有效的
    //  4.var属性:永远无效

    强制类型转换

    fun main(arg: Array<String>) {
        var x :Any = "a"
        val i = x as Int
        print(i)
    }

    如果类型强制转换,而且类型不兼容,那么会抛类型转换异常,这是不安全的,不安全的类型转换使用中辍操作符as

    为了避免抛异常.可以使用as? ,当类型转换失败时候回返回null,不再抛异常

  • 相关阅读:
    Linux几个常用的目录结构
    Linux 安装composer
    Elasticsearch修改network后启动失败
    php7 闭包调用
    php 爬虫框架
    file_get_contents('php://input') 和POST的区别
    PHP指定日期转时间戳
    .Net 站点跨域问题及解决方法
    C# 多线程学习系列一
    Nginx学习系列四默认负载均衡轮询及Ip_hash等常用指令介绍
  • 原文地址:https://www.cnblogs.com/loaderman/p/10148045.html
Copyright © 2011-2022 走看看