Kotlin 基本语法---4.Kotlin 的智能转换

上一篇:Kotlin 基本语法---3.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)
  • 优点:不会抛出类型转换异常

上一篇:Kotlin 基本语法---3.Kotlin 的空安全类型

猜你喜欢

转载自blog.csdn.net/wuqingsen1/article/details/83023786