Scala类型检查与转换 isInstanceOf、asInstanceOf

Scala类型检查与转换

isInstanceOf:检查某个对象是否属于某个给定的类。
asInstanceOf:将引用转换为子类的引用。
classOf:如果想测试p指向的是一个Employee对象但又不是其子类,可以用if(p.getClas
s == classOf[Employee])
,classOf方法定义在scala.Predef对象中,因此会被自动引入。如:

[plain]  view plain  copy
  1. if(p.isInstanceOf[Employee]){   
  2. val s = p.asInstanceOf[Employee]   
  3. }  

与Java相比:

Scala

Java

obj.isInstanceOf[Class]

obj instanceof Class

obj.asInstanceOf[Class]

(Class)obj

classOf[Class]

Class.class


e.g
[plain]  view plain  copy
  1. object ClassTest {  
  2.   def main(args: Array[String]){  
  3.     val testA: SuperClass = new SuperClass  
  4.     val testB: SuperClass = new SubClass  
  5.     val testC: SubClass = new SubClass  
  6.       
  7.     println(testA.isInstanceOf[SuperClass])  
  8.     println(testB.isInstanceOf[SuperClass])  
  9.     println(testC.isInstanceOf[SubClass])  
  10.       
  11.     println(testA.asInstanceOf[SuperClass])  
  12.     println(testB.asInstanceOf[SuperClass])  
  13.     println(testB.asInstanceOf[SubClass])  
  14.       
  15.     if(testB.getClass() == classOf[SuperClass]){  
  16.         println("true")  
  17.     }  
  18.     else{  
  19.       println("false")  
  20.     }  
  21.   }  
  22. }  
  23.   
  24. class SuperClass{  
  25.     
  26. }  
  27.   
  28. class SubClass extends SuperClass{  
  29.     
  30. }  
运行结果:

[plain]  view plain  copy
  1. true  
  2. true  
  3. true  
  4. edu.firstday.SuperClass@11b5a415  
  5. edu.firstday.SubClass@2c2767c8  
  6. edu.firstday.SubClass@2c2767c8  
  7. false  

你可能感兴趣的:(scala)