2017-08-13 55 views
2

我有以下代码:isInstanceOf与路径依赖型工作

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

这是因为a1和a2都指向Outer.Inner类的相同位置。 –

回答

3

因为outer1.Innerouter2.Inner具有相同的擦除,在斯卡拉编写为Outer#InnerisInstanceOf只适用于输入擦除,除非特定情况下的指定不同(因为它适用于复合类型)。

这与List("a", "b").isInstanceOf[List[Int]]是正确的:不相信isInstanceOf,除非您了解类型擦除的工作原理!