手记

【学习打卡】第13天-C01学习Kotlin

  • 课程名称:一课掌握Kotlin 突破开发语言瓶颈
  • 章节名称:
    • 第4章:类型初步
      • 4-4智能类型转换
  • 讲师姓名:bennyhuo
  • 时间:2022-08-13 09:39

课程内容

  • Kotlin智能类型转换

    • Java中父类类型变量,可以用子类类型实例赋值,但如果要使用子类方法,需要强转为子类类型,才能运用

    • Kotlin简化上述步骤

      val kotliner: Kotliner = Person("Benny", 20)//Kotliner是子类,继承了父类Person
      if(kotliner is Person) {// 此处的is相当于Java的instanceof
          println((kotliner as Person).name)// as是类型强转的方法
          println(kotliner.name)// 可以智能转换,因为在if语句中已经判断过了
      }
      
      var value: String? = null
      value = "benny"
      if (value != null) {// 此的类型已经从之前的String?自动转换成String
          println(value.length)
      }// 在此if语句内部,value都是String类型,出了此范围就会变回String?类型
      
    • 不能进行智能转换的情况

      var tag: String? = null
      fun main() {
          if (tag != null) {
              println(tag.length)// 此处编译器会报错
              // tag是顶级变量,可能被其他程序或进程修改其值
          }
      }
      
    • 类型的安全转换

      val kotliner: Kotliner = ...
      println((kotliner as? Person)?.name)//强制类型转换如果失败,会返回null
      
  • 为防止空指针异常的建议:

    • 尽可能使用val来声明不可变引用,让程序的含义更加清晰明确
    • 尽可能减少对函数外部变量的访问,也为函数式编程提供基础
    • 必要时创建局部变量指向外部变量,避免因它变化引起程序错误

学习心得

Kotlin在解决Java编码的问题同时,会不会在制造新的问题?

0人推荐
随时随地看视频
慕课网APP