2011-10-10 17 views
5

में एकाधिक पैरामीटर के साथ अपवाद मैं जानना चाहता हूं कि एक कन्स्ट्रक्टर (फेंकने योग्य, स्ट्रिंग के लिए अलग) में एकाधिक पैरामीटर के साथ अपवाद बनाना ठीक है या यह अभ्यास खराब है या नहीं?कन्स्ट्रक्टर

मुझे एकाधिक पैरामीटर के साथ अपवाद की आवश्यकता क्यों है, मान लीजिए कि मैं मैट्रिक्स का विश्लेषण कर रहा हूं, और जब कोई त्रुटि हो, तो मैं स्थिति के साथ अपवाद उठाउंगा। मैं अपवाद में एक स्पष्ट त्रुटि संदेश देना चाहता हूं, और मैं अंतर्राष्ट्रीयकरण का उपयोग करना चाहता हूं, इसका मतलब है, विभिन्न भाषाओं में संदेश।

उदाहरण के लिए, संदेशों हो सकता है:

वहाँ स्थान 4 पर एक त्रुटि है, 5.
HUBO संयुक्त राष्ट्र समस्या एन ला फिला 4 चोर columna 5.

आप के रूप में देख सकते हैं, टेक्स्ट दोनों संदेशों के लिए अलग है, और वर्णनात्मक होने के लिए संदेश के लिए मूल्य महत्वपूर्ण हैं।

मेरे दृष्टिकोण कुछ इस तरह है: अपवाद के इस प्रकार के साथ

public class MatrixException extends Exception { 
    int x; 
    int y; 
    public MatrixException (int x, int y){ 
    this.x = x; 
    this.y = y; 
} 
public String getMessage(){ 
    return Messages.getString("MatrixException.Message1") + this.x 
     Messages.getString("MatrixException.Message2") + this.y 
     Messages.getString("MatrixException.Message3"); 
} 
} 

(Messages वर्ग ResourceBundle वर्ग को लागू करता है)

, मैं इसी भाषा में एक वर्णनात्मक संदेश बना सकते हैं, लेकिन मैं स्ट्रिंग और थ्रोबल के लिए अलग-अलग पैरामीटर के साथ अपवाद कभी नहीं देखा है।

मैंने एक अच्छी तरह से परिभाषित अपवाद पदानुक्रम लिखने के बारे में जानकारी खोजने का प्रयास किया है, लेकिन वहां बहुत सारे दस्तावेज नहीं हैं, और रचनाकारों के बारे में कुछ भी नहीं है।

मेरे दृष्टिकोण के बारे में आप क्या सोचते हैं?

+0

यह कोशिश करने और यह काम करने के तरीके के बारे में कैसे? एसओ आमतौर पर कंक्रीट समस्याओं के बारे में ठोस प्रश्नों के लिए है, जो कि क्या-ifs के बारे में निष्क्रिय संगीत के बजाय है। –

उत्तर

5

इस दृष्टिकोण के साथ कुछ भी गलत नहीं है।

वास्तव में, मानक लाइब्रेरी में कुछ अपवाद वर्ग हैं जो रचनाकारों के साथ हैं जो String और Throwable पर तर्क लेते हैं।

दिमाग में आने वाला पहला उदाहरण SQLException(String, String, int) है। फिर URISyntaxException(String, String, int) और यहां तक ​​कि EnumConstantNotPresentException(Class<? extends Enum>, String) है।

0

मुझे यह पसंद है। आपका दूसरा विकल्प स्ट्रिंग को प्रारूपित करना होगा और सामान्य Exception कन्स्ट्रक्टर का उपयोग करना होगा, लेकिन मुझे लगता है कि आपके पास क्या ठीक है।

0

निश्चित रूप से। यदि आपके कस्टम अपवाद वर्ग में अतिरिक्त पैरामीटर/फ़ील्ड हैं तो अपवाद फेंक दिया गया है, तो एक समस्या का आकलन करना आसान हो जाएगा।

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