मेरे पास एक प्रश्न है जिसके लिए मुझे कोई जवाब नहीं मिला है।जावा लूप वीएस के लिए बढ़ाया गया .NET foreach loop
class Car {
/* car stuff */
}
और फिर जावा
class Truck extends Car {
/* truck stuff */
}
और सी #
class Truck : Car {
/* truck stuff again */
}
सी # निम्न काम करता है ठीक में:
मान लीजिए कि हम या तो जावा या सी # में निम्न कोड डालेंList<Car> carList = new List<Car>();
//add some objects to the collection
foreach(Truck t in carList)
//do stuff with only the Truck objects in the carList collection
यह काम करता है क्योंकि ट्रक कार का उप-वर्ग है जो सरल शब्दों में है कि प्रत्येक ट्रक भी एक कार है। बात यह है कि, उस प्रकार की जांच की जाती है और केवल कारलिस्ट से ट्रक का चयन किया जाता है।
हम जावा में एक ही बात की कोशिश करते हैं: बढ़ाया पाश अंदर कोड की वजह से
List<Car> carList = new ArrayList<Car>();
//add some objects to the collection
for(Truck t : carList)
//**PROBLEM**
, कोड भी संकलन नहीं होंगे। इसके बजाय हम एक ही प्रभाव प्राप्त करने के लिए कुछ इस तरह करना है:
for(Car t : carList)
if(t instanceof Car)
//cast t to Truck and do truck stuff with it
यह एक ही विचार सी में # किसी भी समस्या के बिना काम करता है जो है, लेकिन जावा में आप अतिरिक्त कोड की जरूरत है। यहां तक कि वाक्यविन्यास लगभग समान है! क्या कोई कारण है कि यह जावा में काम नहीं करता है?
यह भी सी # में इतना साफ नहीं है के बाद से हर ट्रक एक कार है, लेकिन नहीं हर कार एक ट्रक ... सी # में रूपांतरण कार्यावधि में करने की कोशिश की है, लेकिन आप होना चाहिए वास्तव में इसके साथ सतर्क। जावा इसके बारे में अधिक सतर्क प्रतीत होता है और प्रोग्रामर को पहले यह जांचना चाहता है (निश्चित रूप से सी # संस्करण कुछ लाभ जोड़ता है यदि आप जानते हैं कि आप क्या कर रहे हैं)। सी # में –
प्रत्येक ऑब्जेक्ट के प्रकार की जांच की जाती है। यदि यह ट्रक है, तो फ़ोरैच लूप का शरीर दर्ज किया जाता है, अन्यथा यह नहीं होता है। इसके बारे में क्या साफ नहीं है?या तो मैं इसे (जावा) या रनटाइम चेक करता हूं (सी #) यह वही अंतिम परिणाम है। – alegen
@alegen, यह सच नहीं है। –