2010-02-09 13 views
15

मैं एक अंतरफलक ATA<T> द्वारा parameterised करना चाहते हैं, और यह भी कि हर वर्ग को लागू करता है कि यह भी लागू करने के लिए Comparable (T और उसके उप-प्रकारों के साथ) चाहते हैं। यह interface A<T> extends Comparable<? extends T> लिखना स्वाभाविक प्रतीत होता है, लेकिन यह काम नहीं करता है। तब मुझे यह कैसे करना चाहिए?जावा इंटरफ़ेस फैली तुलनीय

+1

मैं भी जावा जेनेरिक्स पूछे जाने वाले प्रश्न (http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ204) का उल्लेख होगा जो आप के बारे में 'Comparable' अधिक विचार दे देंगे। –

उत्तर

16

जब Comparable<? extends T> इसका मतलब है कि आपको लगता है कि एक (अज्ञात) T की उप-प्रकार, कि यह टी

की

किसी भी उप-प्रकार की तुलना में किया जा सकता है नहीं की तुलना में किया जा सकता है Comparable का एक उदाहरण है लेकिन आप डॉन 'दिखाई देता है टी की आवश्यकता नहीं है, क्योंकि Comparable<T> किसी भी तरह से T के किसी उपप्रकार से तुलना कर सकता है, उदाहरण के लिए Comparable<Number> खुद को Comparable<Double> से तुलना कर सकता है।

तो कोशिश:

interface A<T> extends Comparable<T> { 
    // ... 
} 

या

interface A<T extends Comparable<T>> extends Comparable<A<T>> { 
    // ... 
} 

कि क्या आप के लिए अपने compareTo विधि को लागू करने में T के उदाहरण तुलना करने में सक्षम होने की जरूरत है पर निर्भर करता है।

+0

यह एक शानदार जवाब है! मैं यहां http://stackoverflow.com/questions/6290406/generic-method-to-sort-a-map-on-values ​​से आया था। मेरी समस्या हल –

2

यदि आप तुलनीय उपयोग करते हैं तो आपको तुलनात्मक कार्य में उपप्रकारों की संभावना निर्दिष्ट करने की आवश्यकता नहीं है, यह किसी ऑब्जेक्ट एक्स के किसी उप-प्रकार में कक्षा X के पैरामीटर घोषित करने के लिए प्रकृति संभव है। अधिक जानकारी के लिए नीचे कोड।

public interface Test<T> extends Comparable<T> { 

} 

class TestImpl implements Test<Number> { 
    @Override 
    public int compareTo(final Number other) { 
     return other.intValue() - 128; 
    } 
} 

class TestMain { 
    public static void main(final String[] args) { 
     TestImpl testImpl = new TestImpl(); 
     testImpl.compareTo(Integer.MIN_VALUE); 
    } 
} 
संबंधित मुद्दे