2011-08-28 10 views
9

ओवरराइड करना होगा, मैं TreeMap<String, String> बना रहा हूं और इसे अवरोही फैशन में ऑर्डर करना चाहता हूं।तुलनात्मक <String> को सुपर क्लास विधि

Comparator<String> descender = new Comparator<String>() { 

    @Override 
    public int compare(String o1, String o2) { 
     return o2.compareTo(o1); 
    } 
}; 

मैं बहुत तरह ट्री-मैप का निर्माण: मैं निम्नलिखित तुलनित्र बनाया

The method compare(String, String) of type new Comparator<String>(){} must override a superclass method 

मैं कभी नहीं किया है:

myMap = new TreeMap<String, String>(descender);

हालांकि, मैं निम्न त्रुटि हो रही है पूरी तरह से groked जेनेरिक, मैं गलत क्या कर रहा हूँ?

+1

जहाँ तक मैं देख सकता हूं, कुछ भी नहीं। त्रुटि तब होगी जब आपकी तुलना विधि तुलनात्मक की तुलना() विधि के हस्ताक्षर से मेल नहीं खाती है, लेकिन ऐसा लगता है कि जहां तक ​​मैं देख सकता हूं। – fwielstra

उत्तर

17

आपका ग्रहण परियोजना जाहिरा तौर पर जावा 1.5 को तैयार है। @Override एनोटेशन वास्तव में इंटरफ़ेस विधियों पर समर्थित नहीं है। या तो उस एनोटेशन को हटा दें या जावा 1.6 पर अपने प्रोजेक्ट के अनुपालन स्तर को ठीक करें।

+0

अच्छा अनुमान है। –

1

आह, मुझे समस्या मिली। एक तुलनात्मक के नए अज्ञात उदाहरण को तुरंत चालू करते समय, मैं इंटरफेस विधियों को ओवरराइड नहीं कर रहा हूं ... मैं उन्हें लागू कर रहा हूं। @Override निर्देश समस्या थी। तुलना() विधि मौजूदा विधि को ओवरराइड नहीं कर रही थी, यह इंटरफ़ेस का हिस्सा कार्यान्वित कर रहा था। मैंने उस कोड को किसी अन्य स्थान से कॉपी किया है और इसे @ ओवरराइड नहीं होना चाहिए था।

+3

आपकी परियोजना शायद 1.5 स्रोत स्तर पर सेट है। 1.6 के बाद से आपको इंटरफ़ेस द्वारा निर्दिष्ट '@ ओवरराइड' के साथ भी विधियों को एनोटेट करने की अनुमति है। –

7

यदि आप प्राकृतिक (आरोही) ऑर्डरिंग को उलटा करना चाहते हैं तो आपको कस्टम Comparator लिखने की आवश्यकता नहीं है।

एक अवरोही आदेश प्राप्त करने के लिए बस का उपयोग करें:

myMap = new TreeMap<String, String>(java.util.Collections.reverseOrder()); 
+0

ओह, बहुत अच्छी सुविधा विधि! धन्यवाद! –

संबंधित मुद्दे