【发布时间】:2014-12-12 21:19:10
【问题描述】:
我有一个使用 java 库 (cipango) 的 scala 项目。我正在尝试模拟库中返回 java.util.Iterator 的方法之一。在 scala 方面,我有一个 scala.collections.Iterator[_],我正在使用 scala.collections.JavaConversions 对其进行转换。但它不会编译,并失败并显示以下消息:
Error:(63, 60) type mismatch;
found : java.util.Iterator[_$1] where type _$1
required: java.util.Iterator[?0] where type ?0
mockSipApplicationSessions(id).getSessions.andReturn(sessionsAsJavaIterator)
(可能不相关的一个细节,但我会提到,sessionAsJavaIterator 中的实际元素本身就是 java 接口的模拟。)
我创建了一个显示类似问题的小示例。该示例的错误消息并不完全相同,但非常相似。
Java:
import java.util.Iterator;
public interface IterateMe {
Iterator<?> getSomething();
}
public class SomeClass {
}
斯卡拉:
import org.scalatest.mock.EasyMockSugar
import org.scalatest.{Matchers, FunSpecLike}
import scala.collection.JavaConversions._
class AdhocSpec extends FunSpecLike with Matchers with EasyMockSugar {
describe("IterateMe") {
it("can not be mocked!") {
val m = mock[IterateMe]
val toReturn: java.util.Iterator[_] = Iterator(mock[SomeClass])
expecting { m.getSomething().andReturn(toReturn) }
whenExecuting(m) {
m.getSomething.next() should equal("A")
}
}
}
}
编译错误:
Error:(13, 46) type mismatch;
found : java.util.Iterator[(some other)_$1(in value <local AdhocSpec>)] where type (some other)_$1(in value <local AdhocSpec>)
required: java.util.Iterator[_$1(in value <local AdhocSpec>)] where type _$1(in value <local AdhocSpec>)
expecting { m.getSomething().andReturn(toReturn) }
【问题讨论】:
标签: scala easymock scalatest scala-java-interop