为什么没有类型擦除警告

时间:2013-12-22 03:04:08

标签: scala

在Scala中阅读type erasure上的这个优秀question/answer之后,我尝试了这段代码。 Scala编译器未输出type erasure警告。

scala> val x: List[Int] = List(1,2,3)
x: List[Int] = List(1, 2, 3)

scala> x match {
     |   case List(x: Int) => println("a")
     |   case _ => println("false")
     |  }
false

为什么上述代码不会输出与此代码相同的警告:

scala> List(1,2,3) match {
     |  case l: List[String] => println("list of strings")
     |  case _ => println("ok")
     | }
<console>:9: warning: fruitless type test: a value of type List[Int] cannot 
also be a List[String] (but still might match its erasure)
                   case l: List[String] => println("list of strings")
                           ^
    list of strings

1 个答案:

答案 0 :(得分:3)

第一种情况不只是测试类型 - 它通过模式匹配进行测试,列表只有一个整数元素。