scala:类型转换

测定某个对象是否属于给定的类,用isInstanceOf方法,如果测试成功,可以用asInstanceOf方法转换。

if(o.isInstanceOf[T]){
  val t: T = o.asInstanceOf[T]  
  //若o为T的子类对象,则此句结束后o还是T的子类对象
}

如果o为nullo.isInstanceOf[T]将返回falseo.asInstanceOf[T]将返回null

如果要测试o指向的是一个T对象,但不是T对象的子类对象,上面方法无效,可以用:

if(o.getClass == classOf[T]){ }

getClass方法返回的是java.lang.Class对象,classOf方法返回的也是同样的对象(classOf定义在scala.Predef对象中,所以会自动引入)。
此处Class类的==方法定义在AnyRef类中,在Scala API文档中的解释为:
x == that首先判断x是否为空,如果x为空然后判断that是否为空(都为null返回true),如果x不为空那么调用x.equals(that)来判断是否相等。这里之所以会返回true是因为每一个表示Java类的Class类的实例对象只有一个。

posted @ 2018-12-29 09:00  xuejianbest  阅读(200)  评论(0编辑  收藏  举报