:
तो, क्रम Comparable<T>
सही ढंग से उपयोग करने के लिए, आप अपने अनुसार क्रमबद्ध सूची सामान्य बनाने के लिए, एक बाधा है कि अपनी सूची वस्तुओं है कि एक दूसरे से तुलना की जा सकती संग्रहीत करता है, कुछ इस तरह व्यक्त करने के लिए की जरूरत है एक विधि पैरामीटर के रूप में Comparable
जैसे इंटरफेस का उपयोग करने से आपकी कक्षा जेनेरिक नहीं होती है, जेनेरिक टाइप पैरामीटर घोषित और उपयोग करना यह है कि आप इसे सामान्य कैसे बनाते हैं।
त्वरित-एन-गंदा जवाब: आप चेतावनी प्राप्त कर रहे हैं क्योंकि आप Comparable
उपयोग कर रहे हैं, जो एक सामान्य इंटरफ़ेस, एक कच्चे प्रकार के रूप में, बजाय यह एक विशेष प्रकार का तर्क दे रही है, Comparable<String>
की तरह।
इसे ठीक करने के add()
प्रकार पैरामीटर निर्दिष्ट द्वारा सामान्य बनाने:
<T extends Comparable<? super T>> add(T obj) { ... }
लेकिन इस त्वरित सुधार सामान्य समस्या यह है कि अपने वर्ग असुरक्षित है ठीक नहीं होगा। आखिरकार, आपकी सूची में सभी वस्तुओं को एक ही प्रकार का नहीं होना चाहिए? यह add
विधि आपको एक ही सूची में अभी भी अलग-अलग प्रकार की सुविधा देता है। क्या होता है जब आप विषम प्रकारों की तुलना करने का प्रयास करते हैं (आप compareTo
Object
उदाहरण Number
उदाहरण, या स्ट्रिंग उदाहरण के लिए कैसे करते हैं)? आप सही काम करने के लिए कक्षा के उपयोगकर्ता पर निर्भर कर सकते हैं और सुनिश्चित कर सकते हैं कि वे आपकी सूची में केवल 1 प्रकार की चीज चिपके रहें, लेकिन एक सामान्य वर्ग संकलक को इस नियम को लागू करने देगा।
बेहतर दृष्टिकोण: उचित ठीक है कि आपके अनुसार क्रमबद्ध सूची वर्ग शायद सामान्य समग्र हो जाना चाहिए, बस java.util
में अन्य संग्रह वर्गों की तरह है।
आप होगा शायद की तरह कुछ की तरह:
public class SortedList<T extends Comparable<? super T>>
implements Iterable<T> {
...
public void add(T item) { ... }
public Iterator<T> iterator() { ... }
...
}
ध्यान दें कि जब वर्ग सामान्य है, add
विधि वर्गों औपचारिक प्रकार पैरामीटर बल्कि अपनी ही औपचारिक प्रकार पैरामीटर की घोषणा से उपयोग करता है।
कैसे एक सामान्य वर्ग बनाने के लिए पर वेब पर ट्यूटोरियल बहुत सारे होना चाहिए, लेकिन यहाँ एक त्वरित उदाहरण है:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ002
class Pair<X,Y> {
private X first;
private Y second;
public Pair(X a1, Y a2) {
first = a1;
second = a2;
}
public X getFirst() { return first; }
public Y getSecond() { return second; }
public void setFirst(X arg) { first = arg; }
public void setSecond(Y arg) { second = arg; }
}
होना चाहिए 'टी तुलनीय फैली super T>'। – ColinD
ठीक है, मैंने इसे आजमाया क्योंकि यह पहले था और यह काम करता था। – 3mpty