zoukankan      html  css  js  c++  java
  • scala中的isInstanceOf和asInstanceOf

    如果实例化了子类的对象,但是将其赋予了父类类型的变量,
    在后续的过程中,又需要将父类类型的变量转换为子类类型的变量,应该如何做?
    Ø  首先,需要使用isInstanceOf 判断对象是否为指定类的对象,如果是的话,则可以使用 asInstanceOf 将对象转换为指定类型;
    Ø  注意:p.isInstanceOf[XX] 判断 p 是否为 XX 对象的实例;p.asInstanceOf[XX] 把 p 转换成 XX 对象的实例
    Ø  注意:如果没有用isInstanceOf 先判断对象是否为指定类的实例,就直接用 asInstanceOf 转换,则可能会抛出异常;
    Ø  注意:如果对象是 null,则isInstanceOf 一定返回 false, asInstanceOf 一定返回 null;
    Ø Scala与Java类型检查和转换 Scala  Java obj.isInstanceOf[C]  obj instanceof C obj.asInstanceOf[C]  (C)obj classOf[C]  C.class 
     
    Ø  举例说明:
    package cn.itcast.extends_demo
    class Person3 {}
    class Student3 extends Person3
    object Student3{
        def main (args: Array[String] ) {
        val p: Person3 = new Student3
        var s: Student3 = null
        //如果对象是 null,则 isInstanceOf 一定返回 false
        println (s.isInstanceOf[Student3])
        // 判断 p 是否为 Student3 对象的实例
      if (p.isInstanceOf[Student3] ) {
        //把 p 转换成 Student3 对象的实例
          s = p.asInstanceOf[Student3]
      }
      println (s.isInstanceOf[Student3] )
      }
    }
     
    Scala中getClass 和 classOf
    Ø  isInstanceOf 只能判断出对象是否为指定类以及其子类的对象,而不能精确的判断出,对象就是指定类的对象;
    Ø  如果要求精确地判断出对象就是指定类的对象,那么就只能使用 getClass 和 classOf 了;
    Ø  p.getClass 可以精确地获取对象的类,classOf[XX]可以精确的获取类,然后使用 == 操作符即可判断;
     
    Ø  举例说明:
    package cn.itcast.extends_demo
    class Person4 {}
    class Student4 extends Person4
    object Student4{
      def main(args: Array[String]) {
        val p:Person4=new Student4
        //判断p是否为Person4类的实例
        println(p.isInstanceOf[Person4])//true
        //判断p的类型是否为Person4类
        println(p.getClass == classOf[Person4])//false
        //判断p的类型是否为Student4类
        println(p.getClass == classOf[Student4])//true
      }
    }

  • 相关阅读:
    八数码问题及其扩展
    java注释
    康托展开和逆康托展开
    模线性方程组
    欧拉函数
    扩展欧几里德
    商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)
    商城项目实战 | 2.1 Android 仿京东商城——自定义 Toolbar (一)
    商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现
    Android使用Path实现仿最新淘宝轮播广告底部弧形有锯齿的问题以及解决办法
  • 原文地址:https://www.cnblogs.com/beiyi888/p/9854587.html
Copyright © 2011-2022 走看看