2010-07-14 18 views
21

मैं सिर्फ जावा में स्थानीय कक्षाओं की खोज: Advantages of Local Classes जो गुमनाम इनर क्लासों से अधिक स्थानीय कक्षाओं के कुछ महान लाभ सूचीबद्ध:जावा में स्थानीय क्लास का उपयोग कब करना चाहिए?

public final class LocalClassTest 
{ 
    public static void main(final String[] args) { 
    for(int i = 10; i > 0; i--) { 
     // Local class definition--declaring a new class local to the for-loop 
     class DecrementingCounter { 
     private int m_countFrom; 

     public DecrementingCounter(final int p_countFrom) { 
      m_countFrom = p_countFrom; 
     } 

     public void count() { 
      for (int c = m_countFrom; c > 0; c--) { 
      System.out.print(c + " "); 
      } 
      System.out.println(); 
     } 
     } 

     // Use the local class 
     DecrementingCounter dc = new DecrementingCounter(i); 
     dc.count(); 
    } 
    } 
} 

मैं इस टिप्पणी को भर में आया था।

मेरा सवाल यह है कि ऐसा लगता है कि ऐसे कई मामले होंगे जहां इस तकनीक के गैर-अज्ञात आंतरिक वर्गों पर लाभ होंगे। मेरा मतलब यह है कि: यदि आपकी कक्षा केवल विधि के दायरे में उपयोगी है तो आप स्थानीय वर्ग का उपयोग करेंगे। लेकिन जब आपके तरीके बिंदु पर आते हैं तो वे इतने जटिल होते हैं कि आपको उनके अंदर कस्टम कक्षाओं को परिभाषित करना शुरू करना पड़ता है, वे शायद पहले से ही बहुत जटिल हैं, और उन्हें विभाजित करने की आवश्यकता है। किस बिंदु पर, आपकी स्थानीय कक्षा को एक आंतरिक वर्ग बनना होगा, है ना?

स्थानीय वर्गों की आंतरिक कक्षाओं की तुलना में अधिक वांछनीय होने के कुछ उदाहरण क्या हैं, जिनमें सुपर-जटिल विधियां शामिल नहीं हैं (जिन्हें टाला जाना चाहिए)?

+6

अहह्हह ... मेरी आंखें चोट लगीं। :) – limc

+9

स्थानीय वर्ग लूप में घोषित ???? क्या तुम पागल हो? आपको ऐसा करने की कोई आवश्यकता नहीं है क्योंकि आपकी कक्षा स्थानीय चर के किसी भी लूप तक नहीं पहुंचती है। यह वर्ग बाहरी आसानी से –

+5

@eugener भी हो सकता है: ठीक है, मुझे लगता है कि इसे लूप के बाहर घोषित किया जाना चाहिए, लेकिन यह एक समेकित उदाहरण है जो किसी भी तरह से बेतुका लगता है ... –

उत्तर

8

स्थानीय वर्ग कुछ विशेष विधि में उपयोग किया जाता है और कहीं और नहीं।

मुझे एक उदाहरण प्रदान करने दें, मैंने अपने जेपीईजी डिकोडर/एन्कोडर में एक स्थानीय वर्ग का उपयोग किया, जब मैं फ़ाइल से कॉन्फ़िगरेशन पढ़ता हूं जो आगे डीकोडिंग प्रक्रिया निर्धारित करेगा। यह इस तरह से देखा:

class DecodeConfig { 
    int compId; 
    int dcTableId; 
    int acTableId; 
} 

मूल रूप से यह सिर्फ तीन int एक साथ समूहीकृत रों है। मुझे कॉन्फ़िगरेशन की एक सरणी की आवश्यकता थी, इसलिए मैं सिर्फ एक अज्ञात वर्ग का उपयोग नहीं कर सका। अगर मैं सी में कोडिंग कर रहा था, तो मैं एक संरचना का उपयोग करता।

मैं इसे एक आंतरिक कक्षा के साथ कर सकता हूं, लेकिन सभी डिकोडिंग प्रक्रिया को एक ही विधि में संभाला जाता है और मुझे कहीं और कॉन्फ़िगरेशन का उपयोग करने की आवश्यकता नहीं है। यही कारण है कि एक स्थानीय वर्ग पर्याप्त होगा।

यह निश्चित रूप से सबसे बुनियादी उदाहरण है, लेकिन यह वास्तविक जीवन से है।

+0

मुझे यकीन है कि आपके पास इस दृष्टिकोण के लिए आपका तर्क है, लेकिन यदि आप पूरी तरह से सी की संरचना के लिए शूटिंग कर रहे हैं, तो एनम का उपयोग अधिक उचित समाधान नहीं होगा? – limc

+0

Enum चाल नहीं करेगा, मैंने फ़ाइल से सभी मान पढ़े हैं और वे मानों का पूर्वनिर्धारित सेट नहीं बनाते हैं। इसके अलावा मुझे तीन अलग-अलग पैरामीटरों को समूहबद्ध करने की ज़रूरत है और मुझे यकीन नहीं है कि enums मुझे ऐसा करने में कैसे मदद कर सकता है। – Malcolm

+0

आपने इस "संरचना" को एक निजी कक्षा के बजाय स्थानीय वर्ग बनाने का विकल्प क्यों चुना? यह केवल एक ही विधि के अंदर प्रयोग किया जाता था? आप कितनी जटिल कहेंगे कि विधि थी? –

संबंधित मुद्दे