假设,我们有:
class B
class A extends B
trait T
然后成立:
val a: A with T = new A with T
a.isInstanceOf[B] // result is true !
可以说,
isInstanceOf
方法检查是否存在至少一种类型(并非所有类型)与子类型关系中的右侧相匹配?乍一看,我认为
A with T
类型的值不能是B
的子类型,因为A
和 T
都不是B
的子类型。但这是A
或 T
是B
的子类型-是吗? 最佳答案
isInstanceOf
查找继承链中是否有相应的条目。 A with T
链包括A
,B
和T
,因此a.isInstanceOf[B]
必须为true。
编辑:
实际上,生成的字节码称为javas instanceof
,因此在Java中为a instanceof B
。像a.isInstanceOf[A with T]
这样的更复杂的调用将是(a instanceof A) && (a instanceof T)
。