J'apprends les fonctionnalités du langage Scala. Je déclare une classe avec un paramètre de type.Remplacer les fonctions génériques dans Scala Avec "la méthode xxx ne remplace rien" Erreur
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 + ")"
}
classe Pair
a une fonction générique replaceFirst
. Je déclare une nouvelle classe NastyDoublePair
qui s'étend Pair[Double]
. Et je voudrais remplacer la fonction générique replaceFirst
. Voici le compilez le code d'erreur:
class NastyDoublePair(first: Double, second: Double) extends Pair[Double](first, second){
override def replaceFirst(newFirst: Double): Pair[Double] = {
new Pair[Double](newFirst, second)
}
}
L'erreur de compilation est inférieure
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] = {
^
Cependant, si je change la fonction replaceFirst
à
def replaceFirst(newFirst: T) = {
new Pair(newFirst, second)
}
en plus, changer le Pair[+T]
-Pair[T]
. Tout va bien.
Comment puis-je corriger l'erreur de compilation, même si je souhaite définir le paramètre de type T
sur un type covariant. Sinon, il n'y a pas de solution à mon cas. Je dois utiliser un paramètre de type invariant, pas Pair[+T]
mais Pair[T]
Merci de partager votre idée. Meilleurs vœux.
Ceci est bien aussi longtemps que l'OP est satisfait d'une instance de 'Pair'. –