2011-12-16 23 views
24

पूरे संदर्भ जा रहा है:जावा- <टी का अर्थ तुलनात्मक <T>> का विस्तार करता है?

public class RClass<T extends Comparable<T>> 

मैं कह शीर्षक में बयान का मतलब है कि तर्क विधि में प्लग या तो एक वर्ग है जो अपने व्युत्पन्न से एक तुलनीय लागू करता है या का एक उद्देश्य होना चाहिए में सही नहीं होगा कक्षाएं?

धन्यवाद।

+8

नोट, '<टी तुलनात्मक > '(मुझे लगता है कि आप वहां ऐसा कर सकते हैं) बढ़ाएंगे, क्योंकि आप' टी 'को' तुलनात्मक 'के कार्यान्वयन से अधिक सटीक होना चाहते हैं। –

+1

@ टॉमहॉविन-टाइललाइन क्या आप इसका उदाहरण दे सकते हैं कि यह क्यों आवश्यक हो? मान लें कि मेरे पास मेरी सूची डेटा संरचना है जो केवल तुलनात्मक प्रकारों के साथ काम करती है। जिस तरह से मैं इसे निर्दिष्ट करता हूं वह सार्वजनिक वर्ग MyList > बढ़ाता है। मुझे लगता है कि यह बताएगा और लागू करेगा कि मेरी डेटा संरचना केवल तुलनीय प्रकारों के साथ काम करती है, आपके वाक्यांश में कोई फर्क कैसे पड़ता है? – committedandroider

उत्तर

27

इसका मतलब है कि प्रकार पैरामीटर को तुलनात्मक इंटरफेस के माध्यम से अपने स्वयं के प्रकार के अन्य उदाहरणों के साथ तुलना का समर्थन करना चाहिए।

ओरेकल ट्यूटोरियल Object Ordering में ऐसी कक्षा का एक उदाहरण प्रदान किया गया है। नीचे दिए गए अंश में T extends Comparable<T> के समान पैटर्न ध्यान दें:

public class Name implements Comparable<Name> { 
    ... 
    public int compareTo(Name n) { ... } 
} 
+4

क्यों न केवल नाम लागू करने योग्य है? कक्षा का नाम फिर से निर्दिष्ट करने की आवश्यकता क्यों है? – committedandroider

+5

@committedandroider क्योंकि तुलनात्मक एक सामान्य इंटरफ़ेस है जिसे आपको – bitek

2
मन में

हाँ, और भालू कि Comparableसे व्युत्पन्न वर्ग की वस्तुओंComparable वस्तुओं रहे हैं। विरासत is-a संबंध है।

2

इसका मतलब यह है कि आप केवल एक प्रकार है जो काफी सचमुच फैली Comparable<T> साथ RClass का एक उदाहरण बना सकते हैं। इस प्रकार,

RClass<Integer> a; 

स्वीकार्य, जबकि

RClass<Object> b; 

, नहीं है, क्योंकि Object एक वर्ग है जो सभी पर तुलनीय फैली नहीं है के बाद से Integer फैली Comparable<Integer>

3

कि कक्षा में कहीं न कहीं, प्रोग्रामर की तरह

if(t.compareTo(othert) < 0) { 
    ... 
} 

कि काम करने के लिए कुछ लिखने के लिए की जरूरत है, प्रकार टी एक compareTo-विधि है जो तुलनीय की गारंटी देता है विस्तार प्रकार टी के किसी अन्य वस्तु के लिए यह तुलना होना आवश्यक है अन्य चीजों के साथ, इस तरह के एक विधि का अस्तित्व।

6

जावा-<T extends Comparable<T>>का अर्थ?

क) Comparable <T> एक सामान्य इंटरफेस (याद यह एक "इंटरफेस" अर्थात नहीं एक "वर्ग" है)

ख) extends कक्षा या एक अंतरफलक से विरासत का मतलब है।

ऊपर कहा बिंदु # एक से, यह एक अंतरफलक है .. (याद रखें कि यह एक "वर्ग" से नहीं एक "इंटरफेस" यानी से एक विरासत है)

ग) से ऊपर कहा दोनों अंक # & # बी,

यहां "एक इंटरफ़ेस" "दूसरा इंटरफ़ेस" बढ़ाता है।

इस कक्षा के लिए एक इंटरफ़ेस परिभाषित किया जाना चाहिए .. सिर्फ एक उदाहरण यहां

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 

घ) अब अपने वर्ग यानी public class RClass {} चािहए

1 # या तो "लागू" इस "सामान्य इंटरफ़ेस" Comparable<T> .. !!!

पूर्व: public class RClass<T> implements Comparable<T>

2 # या एक अंतरफलक बना सकते हैं और इस "सामान्य इंटरफ़ेस" Comparable<T> पूर्व तक का:

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 
class RClass<T extends Comparable<T>> implements MinMax<T> { 
    ..... 
    ..... 
} 

यहाँ, विशेष ध्यान देने की जिस तरह से करने के लिए भुगतान कि प्रकार पैरामीटर टी RClass और द्वारा घोषित किया गया है तो MinMax पर पास किया गया। क्योंकि MinMax को Comparable लागू करता है, कार्यान्वयन वर्ग (इस मामले में RClass) को एक ही बाध्य निर्दिष्ट करना आवश्यक है। इसके अलावा, एक बार यह बाध्य स्थापित हो जाने के बाद, इसे लागू खंड में फिर से निर्दिष्ट करने की आवश्यकता नहीं है।

+1

टाइप करने की आवश्यकता है, प्रश्न में पूछा गया है कि 'सार्वजनिक ** कक्षा ** RClass > 'बढ़ाता है। यह एक वर्ग है और एक इंटरफ़ेस नहीं है। तो कृपया टिप्पणी करें कि इसका अर्थ क्या होगा यदि यह कक्षा है। –

1

बस शब्दों में कहें, सामान्य प्रकार टी तुलना करने के लिए तुलनीय होना चाहिए। अन्यथा आप T.compareTo नहीं कर सकते हैं। मद में 28 प्रभावी जावा, यह पता चलता है: "always use Comparable<? super T> in preference to Comparable<T>. <T extends Comparable<? super T>>"

0

==> guhanvj, <T extends Comparable<T>> मतलब यह है कि <T> ऊपरी Comparable<T> वस्तुओं के लिए बाध्य कर रहा है। तो <T> में बाइट, कैरेक्टर, डबल, फ्लोट, लांग, शॉर्ट, स्ट्रिंग और इंटीजर क्लासेस के प्रकार हो सकते हैं जो प्राकृतिक ऑर्डरिंग के लिए Comparable<T> इंटरफ़ेस लागू करते हैं।

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