Quelqu'un peut-il expliquer l'erreur de compilation ci-dessous? Fait intéressant, si je change le type de retour de la méthode get()
à String
, le code compile très bien. Notez que la méthode thenReturn
a deux surcharges: une méthode unaire et une méthode varargs qui prend au moins un argument. Il me semble que si l'invocation est ambiguë ici, alors elle serait toujours ambiguë.Fausse erreur de référence ambigu dans le compilateur/interpréteur Scala 2.7.7?
Plus important encore, existe-t-il un moyen de résoudre l'ambiguïté?
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito._
trait Thing {
def get(): java.lang.Object
}
new MockitoSugar {
val t = mock[Thing]
when(t.get()).thenReturn("a")
}
error: ambiguous reference to overloaded definition, both method thenReturn in trait OngoingStubbing of type
java.lang.Object,java.lang.Object*)org.mockito.stubbing.OngoingStubbing[java.lang.Object] and method thenReturn in trait OngoingStubbing of type (java.lang.Object)org.mockito.stubbing.OngoingStubbing[java.lang.Object] match argument types (java.lang.String) when(t.get()).thenReturn("a")
J'ai ouvert un ticket à ce sujet, car j'ai découvert que Scala n'était même pas cohérente avec elle-même. Billet https://lampsvn.epfl.ch/trac/scala/ticket/2991. –
Le ticket a été fermé comme non valide, et il y a maintenant une explication de ce qui se passe, que je vais copier à ma propre réponse. À l'heure actuelle, je ne pense pas qu'il y ait beaucoup de chance de changer cela. –