gpt4 book ai didi

scala - Scala 2.7.7 编译器/解释器中的虚假模糊引用错误?

转载 作者:行者123 更新时间:2023-12-04 02:41:32 30 4
gpt4 key购买 nike

谁能解释下面的编译错误?有趣的是,如果我更改 get() 的返回类型方法 String ,代码编译得很好。请注意 thenReturn方法有两个重载:一元方法和至少接受一个参数的可变参数方法。在我看来,如果调用在这里模棱两可,那么它总是模棱两可的。

更重要的是,有没有办法解决歧义?

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")

最佳答案

我在使用 Oval (oval.sf.net) 时遇到了类似的问题,试图将其称为 validate() 方法。

Oval 定义了 2 个 validate() 方法:

public List<ConstraintViolation> validate(final Object validatedObject)
public List<ConstraintViolation> validate(final Object validatedObject, final String... profiles)

从 Scala 尝试这个: validator.validate(value)产生以下编译器错误:
both method validate in class Validator of type (x$1: Any,x$2: <repeated...>[java.lang.String])java.util.List[net.sf.oval.ConstraintViolation]                                                          
and method validate in class Validator of type (x$1: Any)java.util.List[net.sf.oval.ConstraintViolation]
match argument types (T)
var violations = validator.validate(entity);

Oval 需要 varargs 参数为空,而不是空数组,所以我终于让它与这个一起工作:
validator.validate(value, null.asInstanceOf[Array[String]]: _*)

关于scala - Scala 2.7.7 编译器/解释器中的虚假模糊引用错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159248/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com