Improvement/s to my Java generic console input method? -


जावा जेनेरिक्स का उपयोग करके मैंने एक सामान्य कंसोल इनपुट विधि को लागू करने की कोशिश की।

  सार्वजनिक स्थिर & LT; टी & gt; T readFromInput (स्ट्रिंग संदेश, कक्षा & lt;? & Gt; c) अपवाद {System.out.println (message) को फेंकता है; स्कैनर स्कैनर = नया स्कैनर (System.in); कोशिश {if (c == Integer.class) return (T) Integer.valueOf (scanner.nextInt ()); अगर (सी == स्ट्रिंग.क्लैस) रिटर्न (टी) स्कैनर। एनएक्सटाइन (); अगर (सी == डबल। वर्ग) रिटर्न (टी) डबल.वल्यूओफ़ (स्कैनर.नएक्स्ट डबल) ()); अगर (सी == फ्लोट.क्लास) रिटर्न (टी) फ्लोट.वल्यूएफ़ (स्कैनर। एनएक्सटीफ़्लॉट ()); } पकड़ (InputMismatchException ई) {नया अपवाद (ई); } वापसी नल; }  

मुझे एक चेतावनी है "टाइप सुरक्षा: अनचेक डास्ट टू इंटिजर टू टी"। @SuppressWarnings के अलावा, क्या यह चेतावनी से बचने के लिए संभव है?

क्या मेरे तरीके को लागू करने के बेहतर तरीके हैं? अग्रिम धन्यवाद

आप इसके बजाय class # cast विधि का उपयोग कर सकते हैं, लेकिन कुछ टिप्पणियां छोड़नी चाहिए, क्योंकि भले ही डाली कोई चेतावनी नहीं बनाते हैं, अगर यह संभव नहीं है तो रनटाइम पर क्लाससेलस्ट एक्सप्शन को फेंक सकता है।

  सार्वजनिक स्थिर & lt; टी & gt; T readFromInput (स्ट्रिंग संदेश, कक्षा & lt; T & gt; सी) अपवाद {System.out.println (संदेश) फेंकता है; स्कैनर स्कैनर = नया स्कैनर (System.in); कोशिश करें (यदि (c == Integer.class) // पूर्णांक में अगला कलाकार सुरक्षित रिटर्न c.cast (Integer.valueOf (scanner.nextInt ())); यदि (c == String.class) // स्ट्रिंग के लिए अगला कास्ट सुरक्षित रिटर्न c.cast (scanner.nextLine ()) है; अगर (सी == Double.class) / / डबल करने के लिए अगले कास्ट सुरक्षित वापसी c.cast (Double.valueOf (scanner.nextDouble ())); यदि (c == float.class) // अगले फ्लोट को डाली सुरक्षित वापसी c.cast (float.valueOf (scanner.nextFloat ())); } पकड़ (InputMismatchException ई) {नया अपवाद (ई); } वापसी नल; }  

ध्यान दें कि मैंने विधि हस्ताक्षर को थोड़ा बदल दिया है - यह वर्ग & lt; T & gt; होना चाहिए और वर्ग & lt;? & Gt; गारंटी के लिए, कि वर्ग उदाहरण प्रकार पैरामीटर के अनुरूप है।


Comments