इसका अर्थ यह है कि एनम के लिए टाइप तर्क को एक एनम से प्राप्त करना होगा जो स्वयं उसी प्रकार का तर्क है। ये केसे हो सकता हे? प्रकार तर्क को नया प्रकार बनाकर। इसलिए अगर मुझे StatusCode नाम की एक एनम मिली है, तो यह इसके बराबर होगी:
public class StatusCode extends Enum<StatusCode>
अब अगर आप बाधाओं की जाँच करते हैं, तो हमें मिल गया है Enum<StatusCode>
- इसलिए E=StatusCode
। आइए जाँच करें: E
विस्तार करता है Enum<StatusCode>
? हाँ! हम ठीक हैं।
उदाहरण के लिए, कि कहने के लिए सक्षम किया जा रहा - आप अच्छी तरह से अपने आप को पूछ क्या इस की बात :) खैर, है इसका मतलब है कि Enum के लिए एपीआई ही उल्लेख कर सकते हैं हो सकता है Enum<E>
लागू करता Comparable<E>
। बेस क्लास तुलना करने में सक्षम है (एनम के मामले में) लेकिन यह सुनिश्चित कर सकता है कि यह केवल एक दूसरे के साथ सही तरह के एनम की तुलना करता है। (संपादित करें: ठीक है, लगभग - तल पर संपादित देखें।)
मैंने अपने सी # प्रोटोकॉलबफर्स के पोर्ट में कुछ इसी तरह का उपयोग किया है। "संदेश" (अपरिवर्तनीय) और "बिल्डर्स" हैं (परस्पर, संदेश बनाने के लिए उपयोग किया जाता है) - और वे प्रकार के जोड़े के रूप में आते हैं। इसमें शामिल इंटरफेस हैं:
public interface IBuilder<TMessage, TBuilder>
where TMessage : IMessage<TMessage, TBuilder>
where TBuilder : IBuilder<TMessage, TBuilder>
public interface IMessage<TMessage, TBuilder>
where TMessage : IMessage<TMessage, TBuilder>
where TBuilder : IBuilder<TMessage, TBuilder>
इसका मतलब है कि एक संदेश से आप एक उपयुक्त बिल्डर प्राप्त कर सकते हैं (जैसे संदेश की एक प्रति लेने के लिए और कुछ बिट्स को बदलने के लिए) और एक बिल्डर से आप एक उपयुक्त संदेश प्राप्त कर सकते हैं जब आपने इसका निर्माण किया हो। यह एपीआई का एक अच्छा काम है उपयोगकर्ताओं को वास्तव में इस बारे में परवाह करने की ज़रूरत नहीं है - यह बहुत ही जटिल है, और जहां यह है वहां जाने के लिए कई पुनरावृत्तियों को लिया।
संपादित करें: ध्यान दें कि यह आपको अजीब प्रकार बनाने से नहीं रोकता है जो एक प्रकार के तर्क का उपयोग करते हैं जो स्वयं ठीक है, लेकिन जो एक ही प्रकार नहीं है। इसका उद्देश्य आपको गलत मामले से बचाने के बजाय सही मामले में लाभ देना है ।
इसलिए यदि Enum
जावा में वैसे भी "विशेष रूप से" संभाला नहीं गया था, तो आप (जैसा कि टिप्पणी में उल्लेख किया गया है) निम्नलिखित प्रकार बना सकते हैं:
public class First extends Enum<First> {}
public class Second extends Enum<First> {}
Second
के Comparable<First>
बजाय लागू होगा Comparable<Second>
... लेकिन First
खुद ही ठीक हो जाएगा।