0

asInstanceOf[]和 和有什么不一样isInstanceOf[]

4

2 回答 2

6

一般来说,a.asInstanceOf[B]执行实际的强制转换:它接受类型 A 的对象并返回(如果可能的话)类型 B 的对象,而a.isInstanceOf[B]返回指示是否a具有类型的布尔值B

严格来说 isInstanceOf[B] 不仅看 a 是否为 B 类型,而且如果 a 在上侧继承树中具有 B 类型(所以如果 a 的 B 超类,isInstanceOf 产生 true),重要的注意是 isInstanceOf 在实际工作对象类型层次结构而不是引用类型。

于 2013-07-11T08:16:30.377 回答
3

我只想补充一下常见的模式

if (x.isInstanceOf[B]) {
    val b = x.asInstanceOf[B];
    ...
} else ...

可以很好地写成

x match {
    case (b: B) => ...
    ...
}

如果对单个x.

于 2013-07-11T12:46:19.700 回答