使用 "method xxx overrides nothing" 错误覆盖 Scala 中的通用函数

Override Generic Functions in Scala With "method xxx overrides nothing" Error

我正在学习 Scala 语言特性。我声明了一个带有类型参数的 class。

class Pair[+T](val first: T, val second: T){
  // T is a covariant type. So an invariance R is introduced.
  def replaceFirst[R >: T](newFirst: R) = {
    new Pair(newFirst, second)
  }

  override def toString = "(" + first + ", " + second + ")"
}

Class Pair 具有通用函数 replaceFirst。我声明一个扩展 Pair[Double] 的新 class NastyDoublePair。我想重写通用函数 replaceFirst。这是编译错误代码:

class NastyDoublePair(first: Double, second: Double) extends Pair[Double](first, second){
  override def replaceFirst(newFirst: Double): Pair[Double] = {
    new Pair[Double](newFirst, second)
  }
}

编译错误如下

Ch17.scala:143: error: method replaceFirst overrides nothing.
Note: the super classes of class NastyDoublePair contain the following, non final members named replaceFirst:
def replaceFirst[R >: Double](newFirst: R): ch17.p9.Pair[R]
            override def replaceFirst(newFirst: Double): Pair[Double] = {
                                     ^

但是,如果我将函数 replaceFirst 更改为

def replaceFirst(newFirst: T) = {
  new Pair(newFirst, second)
}

此外,将 Pair[+T] 更改为 Pair[T]。一切顺利。

如何修复编译错误,即使我想将类型参数 T 设置为协变类型。否则,我的案子没有解决办法。我必须使用不变类型参数,不是 Pair[+T] 而是 Pair[T]

感谢分享您的想法。祝福。

发生这种情况是因为类型参数在 NastyDoublePair 中发生了变化,您可以按如下方式进行编译:

class NastyDoublePair(first: Double, second: Double) extends Pair[Double](first, second){
  override def replaceFirst[R >: Double](newFirst: R) = {
    new Pair(newFirst, second)
  }
}