Pourquoi ce qui suit ne compilera pas à Scala:Pourquoi surcharger les méthodes polymorphes avec différentes limites supérieures compilez pas Scala
class A
class B
object X {
def f[Q <: A](q: Q): Q = q
def f[Q <: B](q: Q): Q = q
}
avec le message d'erreur
<console>:16: error: method f is defined twice
conflicting symbols both originated in file '<console>'
def f[Q <: B](q: Q): Q = q
À ma connaissance, après l'effacement de type, def f[Q <: A](q: Q): Q
doit être remplacé par sa limite supérieure: def f(q: A): Any
et le second surchargé f
en conséquence. Donc, ils devraient être distinguables après effacement de type. Alors, pourquoi Scala se plaint quand même?
J'ai trouvé cet ancien article sur ce qui semble être les mêmes problèmes. http://www.scala-lang.org/old/node/4625.html – mdm
donc, après avoir lu ce thread, cela signifie que c'est "juste" un bogue dans le compilateur Scala qui ne sera probablement jamais corrigé; mais travaille avec optimisme dans Dotty. En outre, si vous rediffusez ce commentaire comme réponse, je l'accepterai comme réponse correcte. –