2010-07-02 21 views
41

मैं कुछ सी # कोड जावा में परिवर्तित कर रहा हूं और मुझे एक अपवाद शामिल करने की आवश्यकता है जो सी # के अमान्य ऑपरेशन अपवाद के समान है। क्या ऐसी किसी वस्तु का अस्तित्व है? दो भाषाओं में समकक्ष अपवाद प्रकारों की एक सूची भी है? धन्यवाद। क्या सी # के अमान्य ऑपरेशन अपवाद का जावा समतुल्य है?


मुझे लगता है कि मेरे विशेष मामले में IllegalStateException सबसे उपयुक्त है। प्रतिसाद के लिए धन्यवाद।

+0

जावा में यह अपवाद के बजाए एक त्रुटि होगी ... यह हमें यह बताने का जेवीएम तरीका है कि कुछ गलत हो गया है। –

+0

@Andreas_D - आपका क्या मतलब है :) मैं आपकी पोस्ट को प्रश्न से कनेक्ट नहीं कर सकता। –

+1

@ पीटर - जावा में हमारे पास दो प्रकार के थ्रोरेबल्स हैं: त्रुटियां और अपवाद। त्रुटियों को आमतौर पर वर्चुअल मशीन द्वारा फेंक दिया जाता है। आईओई की मेरी समझ यह है कि वीएम का पता लगाता है कि एक विधि को निष्पादित नहीं किया जा सकता है। मुझे लगता है, जावा में आपको रनटाइम पर लोड बाइटकोड को संशोधित करना होगा ताकि सी # में एक क्रैश या अनलोडेड डीएल इस अपवाद का कारण बन सके - और इस मामले में, JVM शिकायत करेगा - एक त्रुटि के साथ। –

उत्तर

53

शायद IllegalStateException

जो मैंने अमान्य ऑपरेशन अपवाद के बारे में पढ़ा है: "ऑब्जेक्ट की वर्तमान स्थिति के लिए विधि कॉल अमान्य होने पर अपवाद फेंक दिया गया है।"

IllegalStateException के लिए: "सिग्नल जो किसी विधि को अवैध या अनुचित समय पर बुलाया गया है। दूसरे शब्दों में, जावा पर्यावरण या जावा एप्लिकेशन अनुरोधित ऑपरेशन के लिए उचित स्थिति में नहीं है।"

InvalidOperationException का उपयोग करने के तरीके के आधार पर, मैं IllegalArgumentException और UnsupportedOperationException देख सकता हूं कि आप क्या चाहते हैं। पूर्व का तात्पर्य यह है कि, सामान्य रूप से, विधि कॉल करने के लिए ठीक है, यह इस समय कचरा पारित किया गया था; उत्तरार्द्ध का तात्पर्य है कि विधि कभी इस उदाहरण के लिए कॉल करने के लिए उपयुक्त नहीं है (IllegalStateException के विपरीत, जिसका अर्थ है कि कभी-कभी विषय विधि को कॉल करना उचित हो सकता है, बस इस समय नहीं)।


मैं एक सामान्य # < ग अपवादों में से => जावा अनुवाद के बारे में पता नहीं कर रहा हूँ।

+0

+1 यह काफी प्रत्यक्ष मिलान है। (.Net अपवाद का नाम बहुत अच्छा नहीं है, है ना?) –

+0

@ टीजे .: मैं नेट नाम की तरह हूं, खासकर यदि इसे 'असमर्थित ऑपरेशन अपवाद' नामकरण के साथ जोड़ा गया था। मुझे लगता है कि उन दो नामों का इस्तेमाल कभी-कभी दोनों के बीच भेद बनाम हमेशा संवाद करने के लिए किया जा सकता है। एक 'असमर्थितऑपरेशन अपवाद' के नेट समकक्ष (मैं इसे आपके उत्तर पर मेरी टिप्पणी में इंगित करता हूं) * ठीक है * नाम-वार ('समर्थित नहीं है अपवाद '), लेकिन दोनों भाषाओं ने दो प्रकारों, आईएमओ की क्रैपी जोड़ी बनाई है। – Carl

+0

+1 एक अवैध स्थिति एक अवैध ऑपरेशन का कारण बनता है। काफी तार्किक :) –

3

Petar, (MSDN से)

void WriteLog() 
{ 
    if (!this.logFile.CanWrite) 
    { 
     throw new System.InvalidOperationException("Logfile cannot be read-only"); 
    } 
    // Else write data to the log and return. 
} 

इस उदाहरण कोड के लिए मुझे बताया तो इस संदर्भ में आप एक IllegalStateException इस्तेमाल कर सकते हैं, हालांकि यह कहते हैं:

फेंक एक कार्रवाई एक पर प्रयास किया जाता है जब वह समय जब वर्चुअल मशीन सही स्थिति में नहीं है।

और एक अवैध वीएम राज्य निश्चित रूप से उपरोक्त संदर्भ उदाहरण में मुद्दा नहीं है। यहां, समस्या यह है कि ऑब्जेक्ट अमान्य है, क्योंकि यह केवल पढ़ने-योग्य लॉगफाइल का संदर्भ देता है।

मेरा अपना सलाह: जैसे

package com.pany.project; 
public class InvalidOperationException extends RuntimeException { 

    // add constructors with call to super as needed 

} 

मेरे लिए एक कस्टम अपवाद परिभाषित करते हैं, कि बहुत आसान java.lang पैकेज से सबसे अच्छा फिटिंग अपवाद खोजने की कोशिश तो है।

+0

हालांकि यह अंतःक्रियाशीलता को नुकसान पहुंचाता है। यदि आप एक मानक अपवाद पा सकते हैं जो फिट बैठता है, तो नए लोगों को तैयार करने से प्रत्येक लाइब्रेरी को स्वयं परिभाषित किया जाता है। 'Java.lang' अपवाद प्रकारों का पुन: प्रयोज्य ज्ञान होना अच्छा है, उनका क्या मतलब है, इत्यादि। – BAF

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