isinstanceof 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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值