假设,我们有:

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 TB的子类型-是吗?

最佳答案

isInstanceOf查找继承链中是否有相应的条目。 A with T链包括ABT,因此a.isInstanceOf[B]必须为true。

编辑:

实际上,生成的字节码称为javas instanceof,因此在Java中为a instanceof B。像a.isInstanceOf[A with T]这样的更复杂的调用将是(a instanceof A) && (a instanceof T)

10-06 12:35