2013-10-25 7 views
5

में एक बार उपयोग किया जाता है, क्योंकि मुझे जितना संभव हो उतना कम कोड डुप्लिकेशंस रखने के लिए बेहतर अभ्यास पता है, इसलिए मैंने कक्षा में केवल एक स्कैनर घोषित करने का निर्णय लिया, लेकिन मैं स्कैनर ऑब्जेक्ट को कहां बंद करूंगा या यह बंद करना जरूरी नहीं है, स्कैनर बंद करने से क्या होता है।स्कैनर को बंद करने के लिए जहां कक्षा

private Scanner scanner; 
/** 
* Constructor for objects of class Scanner 
*/ 
public Ssss() 
{ 
    // initialise instance variables 
    scanner = new Scanner(System.in); 
} 
public void enterYourName() 
{ 
    System.out.println("Enter your Name"); 
    String name = scanner.nextLine(); 
    System.out.println("Your name is:" + name); 
} 
public void enterYourAge() 
{ 
    System.out.println("Enter your Age"); 
    int age = scanner.nextInt(); 
     System.out.println("Your age is: " + age); 
} 
+1

आप अपनी 'enterYour ***' विधियों को कहां कॉल करते हैं? (कृपया उन तरीकों के लिए कुछ कोड प्रदान करें जहां आप उन विधियों को कॉल करते हैं)। जब इनपुट किया जाता है, तो स्कैनर बंद होना चाहिए। –

+0

मैं वास्तव में उन्हें कॉल नहीं करता क्योंकि मैं ब्लूज का उपयोग कर रहा हूं हम इसे मैन्युअल रूप से –

+0

करते हैं यह एक उत्कृष्ट प्रश्न है और ओओ डिज़ाइन के कुछ सूक्ष्म और गहरे सिद्धांतों को अनवरोधित करता है: encapsulation और composition, और जिम्मेदारी डालने पर यह कहां है। –

उत्तर

4

इस कोड को मान लिया जाये कि एक वर्ग Ssss में (के रूप में यह प्रतीत होता है) है, पर विचार करें:

  1. आपका वर्ग में शामिल है और एक Scanner वस्तु का उपयोग करता है, तो यह बंद करने के लिए जिम्मेदार है।
  2. Scanner आपकी कक्षा का एक आंतरिक संसाधन, और प्रतिनिधित्व करता है ... विभिन्न विधियों को अलग-अलग समय पर संदर्भित किया जाएगा।
  3. आप नहीं जानते कि आपकी कक्षा (मुख्य कार्यक्रम?) का उपयोगकर्ता इसके साथ कब किया जाता है, इसलिए आप एकतरफा Scanner को बंद नहीं कर सकते - आप इसे कहां बंद कर देंगे?

समाधान है कि अपने वर्ग Ssss अपनी ही विधि है कि Ssss का उपयोग कर कहते हैं "मैं आप के साथ किया हूँ" कोड की अनुमति देता है प्रदान करना होगा है। इस विधि को परंपरागत रूप से close() कहा जाता है, और इसमें आप स्कैनर बंद कर देंगे (और किसी अन्य संसाधन को साफ़ करें)।

ग्राहक (बुला वर्ग) एक में अपने वर्ग Ssss के उपयोग लपेट चाहिए कोशिश अंत में ब्लॉक और फोन finally खंड में अपनेclose() विधि।

यदि आप जावा 7 का उपयोग कर रहे हैं, तो आपकी कक्षा Ssss को AutoCloseable लागू करना चाहिए ताकि इसका उपयोग जावा 7 फीचर का लाभ उठाने के लिए प्रयास-संसाधनों के विवरण में किया जा सके।

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