लोगों के लिए अपवाद फेंकने का सुझाव देने के लिए:
अपवाद फेंकने से मुझे संकलन-समय त्रुटि नहीं मिलती है, यह मुझे रनटाइम त्रुटि देता है। मुझे पता है कि मैं एक अपवाद फेंक सकता हूं, मैं रनटाइम के दौरान संकलन के दौरान मर जाऊंगा।जावा एनम्स और स्विच स्टेटमेंट्स - डिफ़ॉल्ट केस?
फर्स्ट-ऑफ, मैं ग्रहण 3.4 का उपयोग कर रहा हूं।
मेरे पास एक डेटा मॉडल है जिसमें एक मोड प्रॉपर्टी है जो एनम है।
enum Mode {on(...), off(...), standby(...); ...}
मैं वर्तमान में इस मॉडल के एक दृश्य के लिए लिख रहा हूँ और मैं कोड
...
switch(model.getMode()) {
case on:
return getOnColor();
case off:
return getOffColor();
case standby:
return getStandbyColor();
}
...
है मैं एक त्रुटि हो रही है "यह पद्धति प्रकार java.awt.Color का एक परिणाम लौटना चाहिए" क्योंकि मैं फ़ंक्शन के अंत में कोई डिफ़ॉल्ट केस नहीं है और कोई वापसी xxx नहीं है। I उस मामले में एक संकलन त्रुटि चाहते हैं जहां कोई व्यक्ति enum (जैसे शटडाउन) में एक और प्रकार जोड़ता है, इसलिए मैं एक डिफ़ॉल्ट केस नहीं डालना चाहता जो एक AssertionError फेंकता है, क्योंकि यह एक संशोधित मोड के साथ संकलित होगा और नहीं रनटाइम तक एक त्रुटि के रूप में देखा जाना चाहिए।
मेरा प्रश्न यह है:
EclipseBuilder (और javac) क्यों नहीं पहचानता, कि इस स्विच सभी संभावनाओं को शामिल किया गया (या यह उनके कवर करता है?) और मुझे एक वापसी प्रकार की आवश्यकता होगी, के बारे में चेतावनी बंद करो। क्या कोई तरीका है जो मैं मोड में विधियों को जोड़ने के बिना कर सकता हूं?
विफल होने पर, स्विच स्टेटमेंट्स पर चेतावनी/त्रुटि का कोई विकल्प है जो सभी एनम के संभावित मूल्यों को कवर नहीं करता है?
संपादित करें: रोब: यह एक संकलन त्रुटि है। मैंने इसे javac के साथ संकलित करने का प्रयास किया और मुझे विधि के अंतिम} को लक्षित करने में "अनुपलब्ध वापसी कथन" त्रुटि मिल गई। ग्रहण विधि के शीर्ष पर त्रुटि को बस रखता है।
त्रुटि एक IDE चेतावनी या एसी है ओंपिलर त्रुटि? यदि बाद वाला, तो आपके पास कुछ विकल्प हो सकते हैं। – Rob
अगर कोई व्यक्ति enum बदलता है तो कोई त्रुटि चाहते हैं: चीजें चाहते हैं, लेकिन कभी-कभी लोग ऐसी चीजें चाहते हैं जो समझ में नहीं आते हैं। जावा जैसी भाषा के मामले में, जहां फ़ाइलों को स्वतंत्र रूप से संकलित किया जा सकता है, यह सुनिश्चित करने का कोई तरीका नहीं है कि जब आप नहीं देख रहे थे तो enum नहीं बदला था। – kdgregory
@kdgregory - हालांकि, अगर enum बदल जाता है और recompiled हो जाता है, तो आपकी कक्षा को फिर से सम्मिलित किया जाना चाहिए क्योंकि यह enum पर निर्भर करता है। मुझे नहीं लगता कि "यह स्विच एनम के सभी उदाहरणों को कैसे संभालता है" कहने की क्षमता और एक नया उदाहरण जोड़ने के लिए enum परिवर्तन ... "इस पंक्ति से enum विधि blah कहते हैं" से अलग है और कोई बदल रहा है उस विधि के प्रकार हस्ताक्षर। निश्चित रूप से, जावा अब इसका समर्थन नहीं करता है, लेकिन यह हो सकता है, और मुझे नहीं लगता कि इसका कोई नकारात्मक प्रभाव कैसे होगा ... यह केवल चीजों को क्लीनर, डेवलपर्स के लिए आसान बना देगा। – RHSeeger