使用 "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)
}
}
我正在学习 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)
}
}