क्यों vavr की कोशिश कंटेनर कैच फेंकने योग्य नहीं बल्कि अपवाद करता है?

वोट
0

मैं जावा के प्रकार प्रणाली और अपवाद हैंडलिंग में एक विशेषज्ञ नहीं हूँ। लेकिन मैं इतना में पाया है कि हम केवल अपवाद नहीं बल्कि फेंकने योग्य के पकड़ने चाहिए।

: यहाँ की कड़ी है एक कोशिश पकड़ में फेंकने योग्य का उपयोग करने और अपवाद के बीच अंतर

Vavr के पुस्तकालय में मैं इस स्रोत कोड मिला:

public interface Try<T> extends Value<T>, Serializable {
long serialVersionUID = 1L;

static <T> Try<T> of(CheckedFunction0<? extends T> supplier) {
    Objects.requireNonNull(supplier, supplier is null);

    try {
        return new Try.Success(supplier.apply());
    } catch (Throwable var2) {
        return new Try.Failure(var2);
    }
}

मैं भविष्य में किसी भी मुद्दे के लिए होता है अगर मैं इस कंटेनर का प्रयोग करेंगे? मैं कुछ महत्वपूर्ण अपवाद 'के' समारोह के निष्पादन के दौरान हो सकता है कि याद करेंगे?

02/12/2019 को 21:56
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
2

Throwableकी एक सुपर क्लास है Exception, जिसका अर्थ है catch (Throwable var)कैच अपवाद के रूप में अच्छी तरह से। इसलिए vavr में कोड सही है - जब भी कोई है Throwableफेंक दिया यह एक में लिपटे हो जाएगा Try.Failure

02/12/2019 को 22:00
का स्रोत उपयोगकर्ता

वोट
1

नोट क्या जवाब जुड़ा हुआ पोस्ट में कहते हैं:

आप आम तौर पर ऐसा नहीं है, बहुत उच्चतम एक धागा जहां प्रवेश करने के लिए या चाहते हैं के स्तर पर "सभी को पकड़ने" पर सिवाय शायद चाहिए अन्यथा बिल्कुल सब कुछ गलत हो सकता है कि संभाल

जोर मेरा।

यही कारण है कि यहां संभावित मंशा है। यह एक है tryआवरण को संभालने के लिए मतलब सब कुछ और उपयोगकर्ता यह तय करें कि वे साथ और कैसे सौदा करना चाहते हैं। यह वे स्काला की तरह एक निर्माण के लिए जा रहे हैं लगता है Tryकि आप उन्हें स्वयं को पकड़ने के बिना अपवाद संभाल जाने के लिए। कि काम करते हैं और लगातार होने के लिए, सब कुछ उसी तरह से संभाला जाना चाहिए, या आप किसी पकड़ा जा करने की जरूरत के अपवाद हैं, तथा अपेक्षाकृत कम इस वर्ग का इरादा रखता नियंत्रित किया जाता है होगा।

से संबंधित

मैं कुछ महत्वपूर्ण अपवाद 'के' समारोह के निष्पादन के दौरान हो सकता है कि याद करेंगे?

आप उन्हें छूट न जाए। वे एक में लिपटे लौटा दी रहे हैं Try.Failure, और आप त्रुटि प्राप्त करने के बाद फिर उन्हें संभाल कर सकते हैं।

02/12/2019 को 22:01
का स्रोत उपयोगकर्ता

वोट
1

कारण यह है कि Throwableबजाय इस्तेमाल किया गया था Exception, है क्योंकि हम अपने चाहते Tryभी पकड़ करने के लिए वस्तुओं Errorरों। यह उनकी कैसे की विरासत मॉडल Exceptionsऔर Errorsदिखेगा:

यहाँ छवि विवरण दर्ज

यदि हम केवल पकड़ने Exceptions, एक IOErrorहमारे कोड दुर्घटना और हमें एक की ताकत का उपयोग करने से रोका जा सके Tryश्रृंखला:

Try.of(() -> throw new IOError(null))
  .onFailure(() -> /* Do something to fix the IOError */);

जब पकड़ने Throwable, इस IOErrorपकड़ा जाएगा, और हम पर अमल करने में सक्षम हो जाएगा onFailureविधि। यदि हम केवल पकड़ने Exception, निष्पादन लाइन एक पर बंद कर दिया होता, और onFailureकभी नहीं निष्पादित किया जाएगा।

16/01/2020 को 17:05
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more