/ / दो समान वर्गों के लिए इंटरफ़ेस - जावा, अपवाद, इंटरफ़ेस

दो समान वर्गों के लिए इंटरफ़ेस - जावा, अपवाद, इंटरफ़ेस

मुझे इंटरफेस की समस्या है जो मुझे हैलिखो। हमारी कंपनी परियोजना में हमारे पास एक वर्ग है जो कुछ वेब तरीके प्रदान करता है जैसे: logIn, रिपोर्टिंग, addNote और अलग। प्रत्येक विधि अपवाद को फेंकती है जिसे किसी ने लिखा था (शायद वही व्यक्ति जिसने यह वर्ग लिखा है)। अब मुझे इस वर्ग के "समकक्ष" (वेब ​​सेवाओं का उपयोग करके) लिखना होगा और दोनों वर्गों के लिए इंटरफ़ेस लिखना होगा। लेकिन मेरी कक्षा ने किसी भी अपवाद को नहीं फेंका (मैं हस्ताक्षर में अपवाद नहीं लिखता हूं, मैंने इस अपवाद से निपटने के लिए ट्राइ-कैच ब्लॉक का उपयोग किया है)। क्या दोनों वर्गों के लिए इंटरफ़ेस लिखने का कोई सरल तरीका है (जिसमें उस अपवाद के कारण अलग-अलग हस्ताक्षर हैं)? या मुझे इस प्रथम श्रेणी को फिर से लिखना होगा और इसमें ट्राइ-कैच ब्लॉक (या मेरी कक्षा को संशोधित करना) का उपयोग करना होगा। मैं इस स्थिति से बचना चाहूंगा ...

उत्तर:

जवाब के लिए 2 № 1

(मैं हस्ताक्षर में अपवाद नहीं लिखता हूं, मैं इस अपवाद से निपटने के लिए ट्राइ-कैच ब्लॉक का उपयोग करता हूं)

जब तक आपका कोड नहीं हो सकता, तब तक वह अपवाद हैंडलिंग के दुरुपयोग की तरह है वास्तव में उन सभी अपवादों से निपटें। एक अपवाद के साथ करने के लिए सही बात यह है कि इसे एक बिंदु तक फैलाने की अनुमति देना है जो कि कैकल स्टैक को आगे बढ़ा सकता है जो इससे निपट सकता है अच्छी तरह.

लेकिन किसी भी तरह से, आप एक सामान्य इंटरफ़ेस लिख सकते हैं, जहां विधियों को अपवाद के रूप में घोषित किया जाता है। कक्षा के आपके संस्करण में, केवल हस्ताक्षर से अपवाद छोड़ दें; जैसे

public interface Foo {
public void bar() throws SomeException;
}

public class OldFoo implements Foo {
public void bar() throws SomeException { ... }
}

public class NewFoo implements Foo {
public void bar() { ... }
}

यह एक इंटरफ़ेस विधि के लिए एक अपवाद को फेंकने के लिए कानूनी है, और इसे फेंकने के लिए उस पद्धति का कार्यान्वयन नहीं है।


जवाब के लिए 0 № 2

आपके इंटरफ़ेस में परिभाषित आपके तरीके के हस्ताक्षर में अपवाद परिभाषित होना चाहिए। दूसरे शब्दों में अपवाद हस्ताक्षर का हिस्सा है।


जवाब के लिए 0 № 3

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


जवाब के लिए 0 № 4

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