scala:类型转换
测定某个对象是否属于给定的类,用isInstanceOf
方法,如果测试成功,可以用asInstanceOf
方法转换。
if(o.isInstanceOf[T]){
val t: T = o.asInstanceOf[T]
//若o为T的子类对象,则此句结束后o还是T的子类对象
}
如果o为null
,o.isInstanceOf[T]
将返回false
,o.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类的实例对象只有一个。