यदि आपको रनटाइम अपवाद मिल रहा है, तो इसका मतलब है कि जिन वस्तुओं को आपने डालने का प्रयास किया है, वे उस प्रकार के पास नहीं हैं। भाषा के साथ इसके साथ कुछ लेना देना नहीं है। शायद आपके कोड में एक बग है।
संपादित करें: ऐसा लगता है जैसे आप जावा की टाइप सिस्टम कैसे काम करते हैं, इस बारे में भ्रमित हैं। सी # में, जेनेरिक वास्तव में रनटाइम पर विभिन्न प्रकार का प्रतिनिधित्व करते हैं। जावा में, जेनेरिक प्रकार रनटाइम पर मौजूद नहीं होते हैं। वे बेहतर संकलन समय प्रकार की जांच को सक्षम करने के लिए केवल एक सुविधा हैं। संकलन के दौरान, जेनेरिक को एक वास्तविक प्रकार द्वारा प्रतिस्थापित किया जाता है जिसे टाइप एरर के नाम से जाना जाता है।
आम तौर पर, सामान्य प्रकार का क्षरण Object
होता है, लेकिन चूंकि आपने T
के लिए ऊपरी सीमा प्रदान की है, इसलिए इसे उस बाध्य, Comparable
में परिवर्तित किया गया है। इसलिए, मिटाए जाने के बाद, आपका कोड इस तरह दिखता है।
Comparable[] aux = (Comparable[]) new Object[xs.length];
Otherwords में, आप प्रकार Object[]
की एक सरणी बना रहे हैं और तुरंत टाइप करने के लिए Comparable[]
यह कास्ट करने के लिए कोशिश कर रहा। चूंकि Object
Comparable
लागू नहीं करता है, इसलिए प्रकार असंगत हैं, इसलिए आपको रनटाइम अपवाद मिलता है। आप इसके बजाय Comparable
एस की सरणी बनाकर इसे ठीक कर सकते हैं।
public static <T extends Comparable<? super T>> void mergeSort(T[] xs) {
T[] aux = (T[]) new Comparable[xs.length];
mergeSort(xs, aux, 0, xs.length);
}
मुझे लगता है कि आप http://stackoverflow.com/questions/1817524/generic-arrays-in-java देखना चाहिए यह काफी रोचक है। –