यह एक असली शुरुआत प्रश्न है (मैं अभी भी जावा मूल बातें सीख रहा हूं)।जावा में उनके इंटरफ़ेस नाम के साथ चर घोषित क्यों हैं?
मैं (एक तरह से) को समझ सकता हूँ क्यों तरीकों एक सूची < स्ट्रिंग > बजाय एक ArrayList < स्ट्रिंग >, या क्यों वे एक ArrayList एक सूची पैरामीटर के बजाय स्वीकार करेंगे वापसी होगी। यदि यह विधि में कोई फर्क नहीं पड़ता है (यानी, यदि ArrayList से कोई विशेष विधि आवश्यक नहीं है), तो यह विधि को अधिक लचीला और कॉलर्स के लिए उपयोग करना आसान बना देगा। सेट या मैप जैसे अन्य संग्रह प्रकारों के लिए भी यही बात है।
मैं क्या समझ में नहीं आता: इसे इस तरह स्थानीय चर बनाने के लिए आम बात हो गया लगता है:
List<String> list = new ArrayList<String>();
जबकि इस फार्म लगातार कम है:
ArrayList<String> list = new ArrayList<String>();
क्या लाभ यहाँ है?
जो कुछ मैं देख सकता हूं वह मामूली नुकसान है: java.util.List के लिए एक अलग "आयात" लाइन जोड़नी है। तकनीकी रूप से, "आयात java.util। *" का उपयोग किया जा सकता है, लेकिन मुझे अक्सर ऐसा नहीं लगता है, शायद इसलिए कि "आयात" लाइनें कुछ आईडीई द्वारा स्वचालित रूप से जोड़े जाती हैं।
की बजाय एक सूची सूची लौटाएगी, यह सारोफिलिया है। एक कार्यान्वयन बनाम एक दूसरे की क्षमता उस कोड पर निर्भर करती है जो _uses_ परिवर्तनीय है: मैं नहीं देख सकता कि मैं कभी भी कुछ भी चाहता हूं लेकिन दोनों के बीच एक तंग युग्मन। –
"मैं नहीं देख सकता कि मैं कभी भी कुछ भी चाहता हूं लेकिन दोनों के बीच एक तंग युग्मन": क्या इस तथ्य के आधार पर इंटरफेस की पूरी अवधारणा नहीं है कि आप वास्तव में ** ढीला युग्मन चाहते हैं? –
बेशक।लेकिन आप एक समारोह के काम और उसके स्थानीय चर के बीच ढीला युग्मन कब चाहते हैं? खासकर जब संग्रह कार्यान्वयन का चयन करते हैं, क्योंकि विशिष्ट परिस्थितियों के लिए संग्रह अक्सर अनुकूलित होते हैं। –