यह एक जावा असाइनमेंट प्रश्न है, संभवतः उप-टाइपिंग और जेनरिक से संबंधित है। मेरा एक वर्ग है जो विस्तार करता है ArrayList
पंक्तियाँ कहा जाता है
public class Rows extends ArrayList<List<Thing>> implements List<List<Thing>>{}
मुझे इसे दूसरी कक्षा में वापस करने की आवश्यकता है जिसमें एक विधि है जो एक रिटर्न देता है List<List<Thing>>
, इस प्रकार मुझे वांछित रिटर्न प्रकार पाने के लिए ऐसा करने की आवश्यकता है
private List<List<Thing>> list;
public List<List<Thing>> rows() {
Rows r = (Rows) list;// But this cast does not work at runtime
return (List<List<Thing>>) r;
}
ग्रहण का रिटर्न त्रुटि है java.lang.ClassCastException: java.util.ArrayList
पैकेज के लिए नहीं डाला जा सकता। मैं काफी उलझन में हूं क्योंकि मेरी रॉस क्लास फैली हुई है ArrayList
और मुझे लगा कि इसे कास्ट करने में सक्षम होना चाहिए।
उत्तर:
उत्तर № 1 के लिए 1Rows extends ArrayList<List<Thing>>
उपरोक्त परिभाषा कहती है कि Rows
एक है उपवर्ग का ArrayList<List<Thing>>
(जिसका अर्थ है कि यह एक विशेष संस्करण है), नहीं उस Rows
के रूप में एक ही बात है ArrayList<List<Thing>>
.
इसका मतलब है कि ए Rows
एक तरह का है ArrayList<List<Thing>>
(इतना काम करता है) लेकिन एक ArrayList<List<Thing>>
जरूरी नहीं है कि ए Rows
(इसलिए डाउनकास्टिंग "टी काम")।
यदि आपके पास एक ऑब्जेक्ट है जिसे आपने "ए के रूप में बनाया है new ArrayList<List<Thing>>
, तो यह इसका प्रकार है और आप इसे और नीचे "t" कर सकते हैं Rows
, आपको बस इसे एक के रूप में बनाने की आवश्यकता है new Rows
.
(वैसे, बहुवचन वर्ग नामों के लिए अपरंपरागत है।)