- 课程名称:一课掌握Kotlin 突破开发语言瓶颈
- 章节名称:
- 第4章:类型初步
- 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编码的问题同时,会不会在制造新的问题?