estoy usando Mockito para burlarse de un objeto con un método que devuelve un ArrayList un-parametrizada, y no puedo encontrar la manera de conseguir que esto funcioneLlamar a un método genérico java sobrecargada de Scala
firma del método de simulacro de
public java.util.ArrayList getX()
código de ensayo
var mockee = mock(classOf[Mockee])
when(mockee.getX).thenReturn(Lists.newArrayList(x): ArrayList[_])
Thi s realmente compila bien en IntelliJ, pero en tiempo de ejecución lanza:
[error] ....scala:89: overloaded method value thenReturn with alternatives:
[error] (java.util.ArrayList[?0],<repeated...>[java.util.ArrayList[?0]])org.mockito.stubbing.OngoingStubbing[java.util.ArrayList[?0]] <and>
[error] (java.util.ArrayList[?0])org.mockito.stubbing.OngoingStubbing[java.util.ArrayList[?0]]
[error] cannot be applied to (java.util.ArrayList[_$1])
[error] when(mockee.getX).thenReturn(Lists.newArrayList(x): ArrayList[_])
Puedo estar equivocado, pero pensé que 'ArrayList [_]' en Scala no es lo mismo que una ArrayList no parametrizada, es un tipo existencial, es decir, tiene un parámetro de tipo, pero está vinculado a un lugar divertido. Creo que el tipo no parametrizado sería 'ArrayList [AnyRef]', es decir, parametrizado por 'java.lang.Object'. – Owen
Esto parece un error en tiempo de compilación, no un error en tiempo de ejecución. El tipo existencial de Scala 'ArrayList [_]' es su aproximación más cercana al tipo comodín de Java 'ArrayList >'. En realidad tienes un * tipo crudo *, 'Lista de Arreglos'. Dos preguntas SO a tener en cuenta: [tipos existenciales de Scala] (http://stackoverflow.com/questions/1031042/scalas-existential-types) y [Tipos crudos y comodines ...] (http://stackoverflow.com/ preguntas/3489947/raw-types-unbounded-wilcard-and-bounded-wildcard) –
Tiene razón, es un error de tiempo de compilación, pero no está resaltado por el complemento scala. Puedo solucionar esto usando 'thenAnswer (new Answer [ArrayList [_]] {def answer (arg: InvocationOnMock) = Lists.newArrayList (x)})' pero eso no es muy bueno –