上一篇:Kotlin 基本语法---3.Kotlin 的空安全类型
Kotlin 基本语法主要包括以下内容:
- Kotlin 的基本类型
- Kotlin 的类与对象初步
- Kotlin 的空安全类型
- Kotlin 的智能转换
- Kotlin 的的数组与区间
下面要讲的是 Kotlin 的智能转换;
四、Kotlin 的智能转换
所谓的智能转换就是在 Kotlin 中的强制类型转换,下面就是接下来要讲的内容:
- Java 中强制类型转换
- Kotlin 中智能类型转换
- 类型转换异常
- Kotlin 智能类型转换总结
1. Java 中强制类型转换
先看一下在 Java 中是如何转换的,下面我是在 Android Studio 中写的:
//创建父类Parent
class Parent {
}
//创建子类 Child 继承父类 Parent
class Child extends Parent {
public String name = "张三";
}
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Parent parent = new Child();
//如果parent是Child的实例,取出子类 Child 中的name值
if (parent instanceof Child) {
//下面是 Java 中强制类型转化
String name = ((Child) parent).name;
Log.e("=====name", name);
}
}
}
打印结果:
可以看出,Java 的强制类型转换时没必要的,因为我在上面已经指定了 parent 是 Child 类型的;
2. Kotlin 中智能类型转换
达到上面同样的效果,来看一下在 Kotlin 中的写法:
//创建父类 Parent
open class Parent
//创建子类 Child
class Child:Parent(){
val name:String = "张三"
}
fun main(args: Array<String>) {
//智能强制类型转化
val parent:Parent = Child()
//如果parent是Child实例,取出 Child 中的name值(必须要加判断)
if (parent is Child){
println(parent.name)
}
}
打印结果:
可以看出,在 Kotlin 中的智能类型转换,省略了很多代码;
3.类型转换异常
我们都知道在 Java 中如果强制类型转换出错,那么程序就会崩溃报错类型转化异常,那么如果我们写错了会怎么样呢?将上面的代码故意改错,定义 parent 为 Parent 类型的,代码如下:
//创建父类 Parent
open class Parent
//创建子类 Child
class Child:Parent(){
val name:String = "张三"
}
fun main(args: Array<String>) {
//智能强制类型转化
val parent:Parent = Parent()
if (parent is Child){
println(parent.name)
}
}
运行之后发现,程序没有抛出异常,但是也什么都没有打印;可以看出来在 Kotlin 中,即使我们写错了,也不会导致程序崩溃。
4. Kotlin 智能类型转换总结
- 写法:先加判断再写逻辑,如: if (parent is Child) println(parent.name)
- 优点:不会抛出类型转换异常