Avatar ·

Java Generics में raw type क्या है और इनसे क्यों बचना चाहिए?

सभी को नमस्ते! मैं एक शुरुआती Java डेवलपर हूँ, generics सीख रहा हूँ और एक अजीब अवधारणा "raw type" पर आ गया हूँ। लगता है कि यह generics से संबंधित है, लेकिन पूरी तरह से समझ नहीं आ रहा है।\n\nमान लीजिए, मेरे पास ऐसा कोड है:\n\n```java\nList list = new ArrayList(); // क्या यह raw type है?\nlist.add("string");\nlist.add(123);\n```\n\nकंपाइलर चेतावनी देता है, लेकिन कोड काम करता है। मैं लिस्ट में कुछ भी डाल सकता हूँ। लेकिन अगर मैं parameterized type का उपयोग करूँ:\n\n```java\nList list2 = new ArrayList<>();\nlist2.add("string");\n// list2.add(123); // कंपाइलेशन एरर\n```\n\nतो कंपाइलर एरर देता है। क्या अंतर है? Raw type को बुरी प्रैक्टिस क्यों माना जाता है? आखिर कोड तो काम करता है। मैंने सुना है कि raw types बैकवर्ड कम्पैटिबिलिटी के लिए मौजूद हैं, लेकिन नए कोड में इनका उपयोग क्यों करें?