क्यों बूलियन शामिल है (संग्रह <?> सी); प्रत्येक प्रकार के लिए संग्रह ढांचे की विधि की अनुमति है? लेकिन बूलियन एडएल (संग्रह <? ई> सी बढ़ाता है); के लिए अनुमति दें? ई बढ़ाता है। इसलिए, मैंने स्पष्टीकरण के लिए एक कार्यक्रम लिखा था। यहाँ मेरी कार्यक्रमबूलियन के डिजाइन निर्णय में सभी (संग्रह <?> सी) बनाम बूलियन एडएल (संग्रह <? extends E> सी); संग्रह ढांचे में
public class ContainAllTest {
// take ServiceDto
ArrayList<ServiceDto> resultList = new ArrayList<ServiceDto>();
void Test() {
ServiceDto serviceDto = new ServiceDto();
serviceDto.setName("test");
resultList.add(serviceDto);
// another arraylist that takes String
ArrayList<String> resultList1 = new ArrayList<String>();
resultList1.add("test");
// no error, goes for run time.Contain all checking is done for two generic type ServiceDto and String:
resultList.containsAll(resultList1);
// error shown at compile time,as addAll take ServiceDto as generic type but the generic type for resultList1 take String:
resultList.addAll(resultList1);
}
तो है, मेरे सवाल जब मैं resultList.containsAll (resultList1) का लाभ प्राप्त कर सकते है; (संग्रह <?> ग) जब सामान्य प्रकार मेरे मामले स्ट्रिंग कुछ बात गलत बूलियन containsAll जगह different.In और ServiceDto.Was है वहाँ बूलियन containsAll साथ (संग्रह <? फैली ई> ग)
ऑब्जेक्ट्स में समान और हैशकोड विधियां हैं, जो > है। जब आप किसी संग्रह के लिए खोज करते हैं जिसमें आप इसे हर बार उचित प्रकार में डालने की आवश्यकता नहीं रखते हैं। –
@artbristol: हाँ, यह अनिवार्य रूप से एक ही सवाल है, और इसका एक बेहतर जवाब है। मैं इसे डुप्लिकेट के रूप में चिह्नित करने के लिए वोट दूंगा। –
अगर मुझे अपने संग्रह > की सामग्री को extends E> पर कॉपी करना था तो यह कठिन होगा, इसलिए मैं इसमें सभी() को कॉल कर सकता था। यह आवश्यक रूप से ऑब्जेक्ट के पैरामीटर को स्वीकार करने के बराबर बराबर() विधि के बराबर है। (ठीक है, संग्रह मिटाएं दोनों संग्रहों के साथ संग्रह संग्रह