2013-07-29 3 views
5

मैं सार वर्गों के एक नंबर प्रत्येक superclassing तीन या चार ठोस वाले और फार्म की:जावा - इंटरफ़ेस से अधिक Collection.Sort ऑब्जेक्ट्स

public abstract class TypeOfMapObject extends IrrelevantClass implements Serializable, MapObject, Comparable<MapObject> 
{ 
    //irrelevant stuff 
    @Override 
    public int compareTo(MapObject m) 
    { 
    //specific algorithm for natural ordering 
    } 
} 

मेरी कोड में कहीं और मैं एक ArrayList<MapObject> (है जो आबादी वाले किया जा रहा है ठीक है, मैंने इसे चेक किया है) tempMapObjectsArray कहा जाता है मैं Collections.sort(tempMapObjectsArray) का उपयोग करके सॉर्ट करना चाहता हूं (या, मैं इसे ArrayList सॉर्ट करना चाहता हूं और ऐसा लगता है कि Collections.sort() ऐसा करने का सबसे अच्छा तरीका है। इसका सॉर्ट करने का विशिष्ट तरीका महत्वपूर्ण नहीं है) ।

यह संकलन नहीं और संदेश (Netbeans में) दे रही है:

no suitable method found for sort(java.util.ArrayList<Model.MapObject>) 
method java.util.Collections.<T>sort(java.util.List<T>,java.util.Comparator<? super T>) is not applicable 
(cannot instantiate from arguments because actual and formal argument lists differ in length) 
method java.util.Collections.<T>sort(java.util.List<T>) is not applicable 
    (inferred type does not conform to declared bound(s) 
    inferred: Model.MapObject 
    bound(s): java.lang.Comparable<? super Model.MapObject>) 

ऐसा लगता है कि मैं TypeOfMapObject कक्षा में सामान्य गलत परिभाषित करने रहा हूँ, लेकिन यह पहली बार मैं वास्तव में जेनरिक का इस्तेमाल किया है और यह है मंच पर पहुंचे जहां मैं यादृच्छिक रूप से चीजों को कम या ज्यादा कोशिश कर रहा हूं। मैं tutorial के माध्यम से पढ़ रहा हूं लेकिन अब तक यह गलत नहीं है कि मैं "गलत" कर रहा हूं।

संपादित करें: - यदि ऐसा है तो मैं सार श्रेणियां होती हैं TypeofMapObject1, TypeOfMapObject2 आदि, तो मैं का एक उपवर्ग के लिए 1 के एक उपवर्ग तुलना करने में सक्षम होने की जरूरत है विभिन्न सार वर्गों के उपवर्गों में से प्रत्येक के लिए एक दूसरे के बराबर होने की जरूरत है वर्ग के साथ 2.

+0

जब आप कहते हैं कि "यह फेंक रहा है ..." तो आपका मतलब है कि उपरोक्त स्निपेट संकलित करता है और आपको रनटाइम में अपवाद मिलता है? –

+0

नहीं, अस्पष्ट होने के लिए खेद है। यह एक संकलन समय त्रुटि है। अस्पष्ट होने के लिए – MrB

उत्तर

10

मैच तुलनीय प्रकार:

public abstract class TypeOfMapObject extends IrrelevantClass implements Serializable, MapObject, Comparable<TypeOfMapObject> { 
    @Override 
    public int compareTo(TypeOfMapObject m) 
    { 
     //specific algorithm for natural ordering 
    } 
} 

या बस अपने अमूर्त वर्ग में compareTo विधि को परिभाषित नहीं है - को लागू करने के उपवर्ग के लिए इसे छोड़।


सवाल का समाधान करने के लिए संपादित करें:

आप विभिन्न उप-प्रकारों की तुलना करना चाहते हैं, तो उन्हें एक विधि है कि एक मूल्य (स्ट्रिंग कहते हैं), जिसके साथ वे तुलना की जा सकती रिटर्न को लागू कर दिया है। उदाहरण के लिए:

public abstract class TypeOfMapObject extends IrrelevantClass implements Serializable, MapObject, Comparable<TypeOfMapObject> { 
    @Override 
    public int compareTo(TypeOfMapObject m) 
    { 
     return compareValue().compareTo(m.compareValue()); 
    } 

    // subclasses to return their value to compare 
    protected abstract String compareValue(); 
} 

प्रकार compareValue() से लौटे compareable कुछ भी, जैसे पूर्णांक, तिथि, जो कुछ भी हो सकता है।

+0

सोरी को प्रतिबिंबित करने के लिए संपादित किया गया - मुझे अलग-अलग 'TypeOfMapOject' चीजों की तुलना एक दूसरे से तुलना करने में सक्षम होना चाहिए - इसलिए कई प्रकार के अमूर्त वर्ग के सभी को एक-दूसरे के साथ तुलनीय होने की आवश्यकता है। इसे प्रतिबिंबित करने के लिए संपादित प्रश्न। – MrB

+0

उत्तर – Bohemian

+0

प्रतिभा के नीचे संपादन का प्रयास करें! मैं जेनेरिक पर लटका दिया और अन्य विकल्पों को नहीं देखा। धन्यवाद। – MrB

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