Kotlin研发第十八弹——类型检查和自动转换

26 篇文章 0 订阅
25 篇文章 0 订阅

类型检查和自动转换

  • 类型检查和转换
  • is !is表达式
    • 智能转换
    • **“不安全”的转换符和“安全”转换符 **

类型检查和转换

is !is表达式

我们可以运行是通过上面两个操作符检查一个对象是都是某个特定类型

//判断当前数据是否是某种类型
fun judgeTypeTest(){
    val num=2
    if (num is Int){
        println(num)
    }
}

输出

2

智能转换

很多情形需要使用费明确的类型,编译器会跟踪is检查静态变量,并在需要的时候自动插入安全转换:

fun isString(str:Any){
    if (str is String){
        println("is String")
    }
}

编译器足够智能如何转换是安全的,如果不安全,将不会返回

或者再|| &&操作符连用

if (x is String && x.length > 0)
      print(x.length) // x is automatically cast to String

when和while中使用

 fun name(x:Any){
        when (x) {
            is Int -> print(x + 1)
            is String-> println("shu chu $x")
            is Array<*> -> println("这是数组长度为${x.size}")
        }
    }

??? when之前我认为智能在封闭函数seal中不需要带else,现在使用any为何也可以不带????

 var isTrue=true
    while ((x is Int)&&isTrue){
        println("$x mo ren Int")
        isTrue=false
    }

“不安全的”转换符和“安全”转换符

如果转换是不被允许的那么转换符就会抛出一个异常因此我们称之为不安全的。在kotlin中我们用前缀as操作符标识

val x: String = y as String

注意null不能别转换为String因此他不是nullable,也就是说y是空的,则上面的代码会抛出空异常

val x:String?=y as String?

”安全转换符“

为了避免派出异常,可以用as?这个安全转换符,这样失败就会返回null。

val x:String?=y as? String

This表达式

  • This表达式
    • this使用范围

This表达式

在类成员中,this标识当前类的对象

在扩展函数或扩展字面函数中,this标识,左边接受者参数

如果this没有应用者,则指向的是最内层的必和范围。为了再其他范围中返回this,需要使用标签

this的使用范围

为了在范围外部(一个类或者表达式函数或者带标签的扩展字面函数)访问this,我们需要在使用this@lable作为lable

//this的使用
class thisA {
    inner class thisB {
        fun Int.foo() {
            val a = this@thisA
            val b = this@thisB
            val c = this
            val d = this@foo
            println(a.toString())
            println(b.toString())
            println(c.toString())
            println(d.toString())

//            val funLit=@lambda{
//                String.()->
//                val e=this
//                val f=this@
//            }

//            val funLit2={(s:String)->
//                val g=this
//            }

        }
        fun testThis(){
            val num1 = 5
            num1.foo()
        }
    }
}

中间使用this@lambda不成功不知道原因?????

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值