16

重複の可能性:
Scala で vararg を使用するメソッドと使用しないメソッドのあいまいさを解消するにはどうすればよいですか?

現在、アプリケーションの一部を scala に移植しており、Oval ライブラリを使用しています。問題のメソッドは Validator.validate メソッドです。2 つの 署名があります。

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)

これを明確にするにはどうすればよいですか?

4

2 に答える 2

11

これはHow do I disambiguate in Scala between methods with vararg and without withoutの複製である可能性があると思います

基本的に、これは既知の java-scala-interop 問題であり、Scala でアクセスできるようにするための追加の Java アダプターを使用する唯一の回避策です。

于 2011-06-02T00:37:11.440 に答える
5

私が知っている唯一の方法は、リフレクションを使用することです。

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]]
于 2011-06-02T00:42:02.890 に答える