मैं कक्षाओं की एक सरणी बनाना चाहता हूं, प्रत्येक एक ऐसे प्रकार का प्रतिनिधित्व करता है जो उस प्रणाली में उपलब्ध है जो मैं बना रहा हूं। शामिल सभी वर्ग एक सामान्य सुपरक्लास के उप-वर्ग हैं। तो मैं क्या करना चाहते हैं:मैं कक्षाओं की सरणी के साथ जेनेरिक का उपयोग कैसे करूं?
Class<? extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class };
यह मैं त्रुटि देता है:
Cannot create a generic array of Class<? extends SuperClass>.
मैं एक ही संदेश मिलता है कि अगर मैं के दाहिने हाथ की ओर सरणी के निर्माण के अर्हता प्राप्त करने की कोशिश प्रारंभ:
:Class<? extends SuperClass>[] availableTypes = Class<? extends SuperClass>[] { SubClass1.class, SubClass2.class };
मैं अगर मैं जेनरिक योग्यता को खत्म संकलित करने के लिए कोड प्राप्त कर सकते हैं 210
लेकिन फिर मुझे जेनेरिक चेतावनी मिलती है:
कक्षा एक कच्ची प्रकार है। सामान्य प्रकार वर्ग के संदर्भ पैरामीटरकृत किया जाना चाहिए।
मैं कोशिश कर रहा हूं; मैं कोशिश कर रहा हूँ! :) इसके अलावा, इस बिंदु पर, भले ही इससे कोई चेतावनी न उठी, मैं इंटरफ़ेस का एक टुकड़ा खो देता हूं जिसे मैं परिभाषित करने की कोशिश कर रहा था। मैं सिर्फ मनमाने ढंग से कक्षाओं की एक सरणी वापस नहीं करना चाहता; मैं कक्षाओं की एक सरणी वापस करना चाहता हूं जो किसी विशेष सुपर क्लास के सभी उप-वर्ग हैं!
ग्रहण में जेनिक्स घोषणाओं को ठीक करने के लिए किस पैरामीटर का उपयोग करना है, यह जानने के लिए ग्रहण में कुछ सुंदर शक्तिशाली उपकरण हैं, लेकिन इस मामले में यह गिरता है, क्योंकि जब आप कक्षा से निपटते हैं तो यह घटता है। यह "इन्फर जेनेरिक टाइप तर्क" प्रक्रिया प्रदान करता है, चेतावनी छोड़कर, कोड को बिल्कुल भी नहीं बदलता है।
मैं बजाय एक संग्रह का उपयोग करके इस को हल करने के करने में सक्षम था:
List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
लेकिन क्या सरणियों के साथ यह करने के लिए सही तरीका है?
सहप्रसरण! आपने बुरा शब्द कहा! –