Jestem w trakcie nauki Scali i dziś poczułem się pewny, że przedstawię ją jednemu z naszych projektów.Co Scala próbuje mi powiedzieć i jak to naprawić? [required: java.util.List [? 0] where type? 0]
Aplikacja wykonuje wiele wątków JPA/Hibernate i zacząłem implementować jeden z interfejsów Java w Scali. Wszystko poszło dobrze, dopóki nie spróbowałem przetłumaczyć jakiegoś unittest-kodu na Scalę.
Używam dużo Easymocka, kod jest dość oczywisty. Domyślam się, że problem polega na tym, że Scala nie pozwala mi zwrócić wpisanej strony java.util.List tam, gdzie oczekuje ona od typu bez typu. Niestety nie mam pojęcia, jak sprawić, by Scala rzuciła coś, czego oczekuje się parametrów typu na coś bez.
kod, który ilustruje/odtwarza mój problem:
package some.package.name
import java.util.ArrayList
import java.util.List
import javax.persistence.Query
import org.easymock.EasyMock._
import org.junit.Assert._
import org.junit.Test
class MyGreatScalaTest {
@Test
def testSomething() : Unit = {
val mockQuery: Query = createMock(classOf[Query])
val mockResult: List[String] = new ArrayList[String]
mockResult.add("great value")
expect(mockQuery.getResultList).andReturn(mockResult)
replay(mockQuery)
assertEquals(
(mockQuery.getResultList.asInstanceOf[List[String]]).get(0),
"great value")
verify(mockQuery)
}
}
która produkuje następujący błąd kompilatora:
[WARNING] found : java.util.List[String]
[WARNING] required: java.util.List[?0] where type ?0
[WARNING] expect(mockQuery.getResultList).andReturn(mockResult)
[WARNING] ^
Jak widać muszę makiety zaimplementować interfejs javax.persistence.Query, która zwraca a java.util.List.
Być może zadeklarować 'mockResult: lista [_]' Zamiast oraz luźne 'asInstanceOf' nią w dniu? –