2011-06-02 15 views
14

posible duplicado:
How do I disambiguate in Scala between methods with vararg and withoutScala - ambigua referencia a la definición sobrecargada - con varargs

estoy portar actualmente parte de una aplicación a Scala y utiliza la biblioteca del óvalo. El método es la pregunta es el método Validator.validate. Tiene twosignatures:

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

El código Scala, suele presentarse como esto:

def validate(toValidate: AnyRef) = { 
    val validator = createValidator 
    validator.validate(toValidate) 
} 

Y el mensaje de error:

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) 

¿Cómo puedo conseguir este puede ser ambigua?

+0

Se parece ser una referencia ambigua a una pregunta definición sobrecargada de desbordamiento de pila. ¿Debo eliminar esta publicación? Aunque Rex Kerr dio una respuesta que no estaba en el original. – OleTraveler

+0

Recreé mi respuesta allí, y la amplié de dos maneras: una forma abreviada para lo que escribí para los métodos, y una alternativa que funciona para los constructores. –

Respuesta

5

La única forma que conozco es el uso de la reflexión:

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]] 
Cuestiones relacionadas