Scala快速入门--类型转换与类型判断

Posted 一只楠喃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala快速入门--类型转换与类型判断相关的知识,希望对你有一定的参考价值。

类型转换与类型判断

子类转父类的实现

  • 定义一个子类,用一个父类对象指向即可

  • 子类中包含了父类中所有的方法和属性,可以直接转换

//构建一个子类的实例,使用父类指向,只能调用父类的属性和方法
val s2: Person04 = new Student04
println(s2.name+"\\t"+s2.age)
s2.sayHello

父类转子类的问题

  • 父类不能转换为子类,除非本身指向的就是一个子类的对象才可以实现

  • 必须提前判断,如果不判断,会出现类型转换异常

//例如s2的情况:可以实现将s2转换为一个Student04的对象
    s2.asInstanceOf[Student04] //类似于Java中 :Student04 s3 = (Student04)s2
  //上面这种写法的前提是:明确的知道s2本质是一个Student04的对象

粗略类型判断与转换

  • isInstanceOf:用于判断是否是对应的类型

  • asInstanceOf:用于转换为对应的类型

  • 判断与转换

//实际工作中进行强制类型转换时,先判断后转换,避免程序出错
    if(s2.isInstanceOf[Student04]) {
      s2.asInstanceOf[Student04]
    }

不精准
在这里插入图片描述

精准类型判断与转换

  • getClass:获取对象的类型

  • ClassOf:获取类的类型

  • 判断与转换

if(s2.getClass == classOf[Student04]){
s2.asInstanceOf[Student04]
}

精准
在这里插入图片描述
完整代码

class Person04 {
    var name:String = "itcast"
    var age:Int = 20
    def sayHello = println("Hello,Person")
}

class Student04 extends Person04 {
    var stuId:String = "001"
    def sayBye = println("Bye ,Person")
}

object TestPerson04{
  def main(args: Array[String]): Unit = {
    //构建一个子类的实例,使用子类指向,标准的student类型的对象
    val s1: Student04 = new Student04
//    println(s1.name+"\\t"+s1.age) //父类的
//    s1.sayHello
//    println(s1.stuId) //子类的
//    s1.sayBye

    //构建一个子类的实例,使用父类指向,只能调用父类的属性和方法
    val s2: Person04 = new Student04
//    println(s2.name+"\\t"+s2.age)
//    s2.sayHello

    //如何将一个父类转换为一个子类?:如果一个父类指向的是一个子类的对象才可以实现转换
    //例如s2的情况:可以实现将s2转换为一个Student04的对象
//    s2.asInstanceOf[Student04] //类似于Java中 :Student04 s3 = (Student04)s2
    //上面这种写法的前提是:明确的知道s2本质是一个Student04的对象
    //实际工作中进行强制类型转换时,先判断后转换,避免程序出错
//    if(s2.isInstanceOf[Student04]) {
//      s2.asInstanceOf[Student04]
//    }
    //这种判断属于粗略的类型判断,不精确
//    println(s2.isInstanceOf[Person04])
//    println(s2.isInstanceOf[Student04])

//    if(s2.getClass == classOf[Student04]){
//      s2.asInstanceOf[Student04]
//    }
    println(s2.getClass == classOf[Person04])
    println(s2.getClass == classOf[Student04])


  }
  }

点个赞嘛!在这里插入图片描述

以上是关于Scala快速入门--类型转换与类型判断的主要内容,如果未能解决你的问题,请参考以下文章

Scala快速入门--Option类型

廖雪峰JS知识点整理——快速入门

Scala快速入门--异常处理泛型高阶函数隐式转换

Scala学习之路----基础入门

Scala入门到精通——第二十节 类型參数

gRPC快速入门——Protobuf序列化原理解析