Qualcuno può spiegare l'errore di compilazione sotto? È interessante notare che se modifico il tipo di ritorno del metodo get()
su String
, il codice viene compilato correttamente. Si noti che il metodo thenReturn
ha due overload: un metodo unario e un metodo varargs che richiede almeno un argomento. Mi sembra che se l'invocazione qui è ambigua, allora sarebbe sempre ambigua.Errore di riferimento ambiguo spuri nel compilatore/interprete Scala 2.7.7?
Ancora più importante, c'è un modo per risolvere l'ambiguità?
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")
Ho aperto un biglietto su questo, quando ho scoperto che Scala non era nemmeno coerente con se stessa. Biglietto https://lampsvn.epfl.ch/trac/scala/ticket/2991. –
Il ticket è stato chiuso come non valido e ora c'è una spiegazione su cosa sta succedendo, che copierò sulla mia risposta. Al momento, non penso ci siano molte possibilità di un cambiamento in questo. –