2012-11-14 6 views
9

में ओवरलोडेड वर्ग विधियों के साथ जावा इंटरफ़ेस ओवरराइड करना क्या स्कैला में निम्न जावा इंटरफ़ेस को लागू करने का कोई तरीका है?स्कैला

public interface Request { 
    void acceptLanguage(Locale... locales); 
    void acceptLanguage(String... locales); 
} 

मैंने कोशिश की:

override def acceptLanguage(locales: Locale*) : Unit = 
override def acceptLanguage(locales: String*) : Unit = 

लेकिन वह मुझे देता है:

error: double definition: 
have same type after erasure 

और मैं इस कोशिश की:

override def acceptLanguage(locales: Locale*) (implicit Manifest[Locale]) : Unit = {} 
override def acceptLanguage(locales: String*) (implicit Manifest[String]): Unit = {} 

लेकिन अभी ओवरराइड विफल रहता है कि एक अलग हस्ताक्षर देता है

मैं संस्करण 2.9.2 का उपयोग कर रहा हूं।

उत्तर

8

उपयोग @varargs एनोटेशन:

override def acceptLanguage(@varargs locales: Locale*) : Unit = 
override def acceptLanguage(@varargs locales: String*) : Unit = 
+0

मुझे लगता है कि यह सही रास्ते पर है। मैंने पाया कि एनोटेशन के अनुसार विधि पर क्या चल रहा है। मुझे अभी भी निम्न त्रुटि मिलती है: एक varargs एनोटेशन के साथ एक विधि एक ही हस्ताक्षर – Eduardo

+1

के साथ एक फॉरवर्डर विधि उत्पन्न करती है मैंने @ varargs के साथ एनोटेटेड एक विधि के साथ एक छोटा सा उदाहरण बनाया है। कंपाइलर दो विधियों को उत्पन्न करता है, एक सेक के साथ और एक सरणी के साथ। यह संकलक द्वारा स्वचालित रूप से भी किया जाता है जब स्कैला विधि varargs के साथ एक जावा विधि ओवरराइड करता है। चूंकि सेक के साथ विधियां अभी भी उत्पन्न हुई हैं, समस्या अभी भी होती है – Eduardo

+0

ठीक है, मेरा जवाब निश्चित रूप से आपकी समस्या का समाधान नहीं करता है। मेरे जवाब के साथ बहुत जल्दबाजी के लिए खेद है। – ghik