2011-06-02 26 views
14

संभव डुप्लिकेट के साथ:
How do I disambiguate in Scala between methods with vararg and withoutस्काला - अतिभारित परिभाषा को अस्पष्ट संदर्भ - varargs

मैं वर्तमान में स्केला के लिए एक आवेदन के हिस्से के पोर्टिंग कर रहा हूँ और यह ओवल पुस्तकालय उपयोग करता है। विधि सवाल है Validator.validate विधि।

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

स्केला कोड इस तरह आम तौर पर दिखता है:: यह twosignatures है

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) 

मैं इस स्पष्ट हो जा मिल सकता है?

+0

यह ढेर अतिप्रवाह पर एक ओवरलोड परिभाषा प्रश्न का अस्पष्ट संदर्भ प्रतीत होता है। क्या मुझे इस पोस्ट को हटाना चाहिए? हालांकि रेक्स केर ने एक उत्तर दिया जो मूल पर नहीं था। – OleTraveler

+0

मैंने वहां अपना जवाब दोबारा बनाया, और इसे दो तरीकों से विस्तारित किया: मैंने जो तरीकों के लिए लिखा था, उसके लिए एक संक्षिप्त रूप, और एक वैकल्पिक जो रचनाकारों के लिए काम करता है। –

उत्तर

11

मुझे लगता है कि इस How do I disambiguate in Scala between methods with vararg and without

मूल रूप से का डुप्लिकेट हो सकता है, यह एक ज्ञात जावा-स्केला-इंटरॉप समस्या है, और केवल समाधान स्काला में सुलभ बनाने के लिए अतिरिक्त जावा एडाप्टर शामिल है।

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]] 
संबंधित मुद्दे