对抽象类型的部分函数没有类型擦除警告

时间:2014-07-02 20:47:06

标签: scala compiler-warnings type-erasure

以下定义不会在scala 2.10.4上触发任何警告:

class NoWarning[T] {
  def f: PartialFunction[Any, T] = { case x: List[T] => x.head }
}

然而,这个(如预期的那样)在scala 2.10.4上,但不是在2.11.1上:

class WithWarning {
  def f[T]: PartialFunction[Any, T] = { case x: List[T] => x.head }
}
  1. 为什么第一个定义根本不会触发警告?
  2. 为什么第二个定义不会在scala 2.11.1上触发警告?

1 个答案:

答案 0 :(得分:0)

Odersky explains模式匹配的差异取决于类型参数是在方法还是类上。

我认为那是因为子类化。