Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala-对重载定义的不明确引用--使用varargs_Scala_Scala Java Interop - Fatal编程技术网

Scala-对重载定义的不明确引用--使用varargs

Scala-对重载定义的不明确引用--使用varargs,scala,scala-java-interop,Scala,Scala Java Interop,可能重复: 我目前正在将一个应用程序的一部分移植到scala,它使用了Oval库。方法是Validator.validate方法。它有: 以及错误消息: error: ambiguous reference to overloaded definition, [INFO] both method validate in class Validator of type (x$1: Any,x$2: <repeated...>[java.lang.String])java.util.L

可能重复:

我目前正在将一个应用程序的一部分移植到scala,它使用了Oval库。方法是Validator.validate方法。它有:

以及错误消息:

error: ambiguous reference to overloaded definition,
[INFO] both method validate in class Validator of type (x$1: Any,x$2: <repeated...>[java.lang.String])java.util.List[net.sf.oval.ConstraintViolation]
[INFO] and  method validate in class Validator of type (x$1: Any)java.util.List[net.sf.oval.ConstraintViolation]
[INFO] match argument types (AnyRef)
[INFO]       this.validator.validate(toValidate)
错误:对重载定义的引用不明确,
[INFO]这两个方法都在类内验证类型为(x$1:Any,x$2:[java.lang.String])java.util.List[net.sf.oval.ConstraintViolation]的类内验证程序
[INFO]和类型为(x$1:Any)java.util.List[net.sf.oval.ConstraintViolation]的类内验证程序的方法验证
[信息]匹配参数类型(AnyRef)
[信息]此.validator.validate(toValidate)

我怎样才能使这一点明确无误呢?

我认为这可能是


基本上,这是一个已知的java scala互操作问题,唯一的解决方法是使用额外的java适配器,以便在scala中访问。

我知道的唯一方法是使用反射:

val ambiguous = validator.getClass.getMethods.filter(_.getName == "validate")
val wanted = ambiguous.find(_.getParameterTypes.length == 1).get
wanted.invoke(validator, toValidate).asInstanceOf[java.util.List[ConstraintViolation]]

对于堆栈溢出的重载定义问题,它似乎是一个模棱两可的引用。我应该删除这个帖子吗?尽管Rex Kerr给出了一个与原始答案不同的答案。我在那里重新创建了我的答案,并用两种方式对其进行了扩展:一种是我为方法编写的简短形式,另一种是适用于构造函数的替代形式。有时,通过显式创建
Seq
并使用,例如
validator.validate,您可以避免使用Java适配器(要验证,请使用数组[String]():*)
。请参阅中Yawar和Teimuraz的答案。
error: ambiguous reference to overloaded definition,
[INFO] both method validate in class Validator of type (x$1: Any,x$2: <repeated...>[java.lang.String])java.util.List[net.sf.oval.ConstraintViolation]
[INFO] and  method validate in class Validator of type (x$1: Any)java.util.List[net.sf.oval.ConstraintViolation]
[INFO] match argument types (AnyRef)
[INFO]       this.validator.validate(toValidate)
val ambiguous = validator.getClass.getMethods.filter(_.getName == "validate")
val wanted = ambiguous.find(_.getParameterTypes.length == 1).get
wanted.invoke(validator, toValidate).asInstanceOf[java.util.List[ConstraintViolation]]