Scala - неоднозначная ссылка на перегруженное определение - с помощью varargs
Возможный дубликат:
Как устранить ошибку в Scala между методами с vararg и без
В настоящее время я переношу часть приложения в Scala и использует библиотеку Oval. Этот метод является методом Validator.validate. Он два подписи:
List<ConstraintViolation> validate(Object validatedObject)
List<ConstraintViolation> validate(Object validatedObject, String... profiles)
Код Scala выглядит в целом следующим образом:
def validate(toValidate: AnyRef) = {
val validator = createValidator
validator.validate(toValidate)
}
И сообщение об ошибке:
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)
Как я могу получить это, чтобы быть однозначным?
Ответы
Ответ 1
Я думаю, что это может быть дубликат Как устранить ошибку в Scala между методами с vararg и без
В принципе, это известная проблема java- scala -interop, и единственные обходные пути включают дополнительные адаптеры Java для доступа в Scala.
Ответ 2
Единственный способ, которым я знаю, - использовать отражение:
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]]