isInstanceOf使用路径依赖类型

时间:2017-08-13 03:18:38

标签: scala

我有以下代码:

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

1 个答案:

答案 0 :(得分:3)

因为outer1.Innerouter2.Inner具有相同的删除,在Scala中写为Outer#InnerisInstanceOf仅适用于类型擦除,除非针对特定情况指定不同(因为它适用于复合类型)。

这类似于List("a", "b").isInstanceOf[List[Int]]是真的:除非您了解类型擦除的工作方式,否则不要信任isInstanceOf