/ / इस कोड को कास्टिंग की आवश्यकता क्यों है? - जावा, जेनरिक, कास्टिंग, लिंक्ड-लिस्ट, वैरेडिक-फंक्शन

इस कोड को कास्टिंग की आवश्यकता क्यों है? - जावा, जेनेरिक, कास्टिंग, लिंक्ड-लिस्ट, वैरिएडिक-फ़ंक्शंस

मैं अभी जेनरिक का अध्ययन कर रहा हूं, और मेरी समझ से, हम जेनरिक का उपयोग करते हैं ताकि हम कास्ट करने की आवश्यकता से बच सकें / निकाल सकें, इसलिए मुझे आइटम और लिंक लिस्ट को जोड़ते समय क्यों डालना होगा?

public class ThisIsCode<E> implements Code{

LinkedList<E> list = new LinkedList<>();

public final void add(E... item) {
List<E> thingie = new LinkedList<>();

for (E i: item) {
thingie.add((E) item);
}

list.add((E)thingie);

}

मैं भी इस विधि में और एक सरणी में डालना है ?? मुझे नहीं लगता कि मुझे आइटम को एक सरणी में रखना चाहिए, इसलिए मैं थोड़ा भ्रमित हूं।

public void addSingle(Object item) {
add((E[]) item);

}

उत्तर:

उत्तर № 1 के लिए 6

आपको एक की जरूरत नहीं है देना, आप गलत बात जोड़ रहे हैं। इस

for (E i: item) {
thingie.add((E) item);
}

होना चाहिए

for (E i: item) {
thingie.add(i);
}

तथा

list.add((E)thingie);

कुछ ऐसा होना चाहिए

list.addAll(thingie);

उत्तर № 2 के लिए 1

हम जेनेरिक का उपयोग करते हैं ताकि हम डालने की आवश्यकता से बच सकें / निकाल सकें

यह 100% सत्य नहीं है, हम इसके लिए जेनरिक का उपयोग करते हैं प्रकार की सुरक्षा। जरूरत की कमी कास्टिंग के लिए सिर्फ कई लाभों में से एक है जो जेनरिक मेज पर लाते हैं।


कारण आप अपनी वस्तुओं को अपने में डालना चाहते हैं foreach लूप है क्योंकि आप "को जोड़ना चाहते हैं item खुद को सूचीबद्ध करें लूप के प्रत्येक पुनरावृत्ति में आपकी लिंक की गई सूची के लिए। क्या तुमको होना चाहिए सरणी के तत्वों को जोड़ रहा है।

यह वही है जो आप करना चाहते थे:

for (E i: item) {
thingie.add(i);
}

इस पंक्ति में आपको अपनी वस्तुओं को फिर से डालने की आवश्यकता है: list.add((E)thingie);, ऐसा इसलिए है क्योंकि आपकी लिंक की गई सूची में aलिंक्ड सूची - तत्व नहीं सूचियों की। यहां आपको जो करना चाहिए वह सभी तत्वों पर निर्भर करता है और उन्हें एक-एक करके जोड़ना; या विधियों में निर्मित जावा में से एक का उपयोग करें।


जवाब के लिए 0 № 3

आपका कोड पहले ही कहता है कि

आइटम में प्रत्येक ई के लिए

। इसलिए आइटम के वापस लौटने की उम्मीद है E वस्तु। इसके अलावा, मुझे यकीन नहीं है। लेकिन कोड:

for (E i: item) {
thingie.add((E) item);
}

होने का दावा किया है

for (E i: item) {
thingie.add(i);
}

की सूची है E। तीसरी पंक्ति के आधार पर। की एक सरणी की सूची नहीं Eयह कुछ स्पष्टीकरण देता है।