अन्य महान उत्तरों के अलावा, एक सूक्ष्म रनटाइम प्रदर्शन लाभ (सरणी आवंटन से बचने के अलावा) है, जो कि शून्य-तर्क और एकल-बहस ओवरलोड्स को कार्यान्वयन लौटाता है जो खाली प्रतिनिधित्व के लिए अनुकूलित किए जाते हैं और एकल-घटना सूची (क्रमशः)।
हम इन के लिए अलग विधि भार के पास नहीं था और केवल शामिल एक भी varargs आधारित पद्धति, तो उस विधि कुछ इस तरह दिखेगा:
public static <E> ImmutableList<E> of(E... es) {
switch (es.length) {
case 0:
return emptyImmutableList();
case 1:
return singletonImmutableList(es[0]);
default:
return defaultImmutableList(es);
}
}
स्विच मामले के प्रदर्शन (या यदि - चेक चेक) अधिकांश कॉल के लिए बुरा नहीं होगा, लेकिन यह अभी भी अनावश्यक है क्योंकि प्रत्येक ऑप्टिमाइज़ेशन के लिए विधि ओवरलोड हो सकता है, और कंपाइलर हमेशा जानता है कि किस ओवरलोड को कॉल करना है। क्लाइंट कोड पर कोई बोझ नहीं है, इसलिए यह एक आसान जीत है।
स्रोत
2012-09-01 15:35:31
और वे सभी अपने पैरामीटर को एक आंतरिक varargs विधि में वैसे भी पास करते हैं ... हुह। मुझे इस पर एक भौहें उठाना होगा। हम्म, स्रोत की एक टिप्पणी है "ये ग्यारह तक चले जाते हैं। इसके बाद, आपको बस varargs फॉर्म मिलता है, और इसके साथ जो भी चेतावनियां आ सकती हैं। :(" मुझे यकीन नहीं है कि यह किस चेतावनी का जिक्र कर रहा है। –
@ टिम, यह शायद कम से कम और ऊपर की ओर एक अच्छा जवाब देगा, और शायद स्वीकार्य उत्तर। – jjnguy
ग्यारह तक जाने के लिए Google के लिए +1! – romacafe