Scala之isInstanceOf与asInstanceOf

isInstanceOf 能判断出对象是否为指定类以及其子类的对象,而不能精确的判断出,对象就是指定类的对象;如果要求精确地判断出对象就是指定类的对象,那么就只能使用 getClass 和 classOf 了。

isInstanceOf[T]

判断对象是否为T类型的实例,是就返回true,不是据返回flase。

// 判断 1 是否为 Double 类型
1.isInstanceOf[Double]  //false
// 判断 List(1) 是否为 List[String]] 类型
List(1).isInstanceOf[List[String]] //true

由于Scala像Java一样泛型存在类型擦除的原因,List(1).isInstanceOf[List[String]]就相当于List(1).isInstanceOf[List[ _ ]], List(1) 是List的实例。

asInstanceOf[T]

将引用转换为子类的引用,就是对象类型强制转换成T类型。

// 将 12 强制转换为 Double 类型
12.asInstanceOf[Double] // 12.0

当Int类型转换为String类型,或者是String类型转换为Int类型时,在运行时会抛出ClassCastException异常,这是由于泛型存在类型擦除的原因导致的,但是把值放到集合之中后再去转换就会不会报错了。

// Int类型强制转换为Sting类型
12.asInstanceOf[String] // ClassCastException
// List[Int] 强制转换为List[String]
List(12).asInstanceOf[List[String]] // List[String] = List(12)

getClass 与 classOf

p.getClass 可以精确地获取对象的类,classOf[XX]可以精确的获取类,然后使用 == 操作符即可判断。

class Person {}
class Student extends Person

val p:Person = new Student
//判断p是否为Person类的实例
println(p.isInstanceOf[Person])  //true
//判断p的类型是否为Person类
println(p.getClass == classOf[Person])  //false
//判断p的类型是否为Student类
println(p.getClass == classOf[Student])  //true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值