我有以下代码:
class Outer {
class Inner
}
val outer1 = new Outer
val outer2 = new Outer
val a1 = new outer1.Inner
val a2 = new outer2.Inner
val a2: outer2.Inner = a1
println(a1.isInstanceOf[outer2.Inner])
我知道val a2: outer2.Inner = a1
由于路径依赖类型而导致编译错误,但我不明白为什么println(a1.isInstanceOf[outer2.Inner])
会打印true
答案 0 :(得分:3)
因为outer1.Inner
和outer2.Inner
具有相同的删除,在Scala中写为Outer#Inner
。 isInstanceOf
仅适用于类型擦除,除非针对特定情况指定不同(因为它适用于复合类型)。
这类似于List("a", "b").isInstanceOf[List[Int]]
是真的:除非您了解类型擦除的工作方式,否则不要信任isInstanceOf
!