10

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

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

तो सवाल करने के लिए वापस, वहाँ क्या अपवाद एक समारोह Kotlin में फेंकता है देखने के लिए किसी भी आसान तरीका है? जावा में लिखे गए तरीकों के बारे में क्या है जिन्हें कोटलिन से बुलाया जा रहा है? यहां तक ​​कि अगर टूलिंग (intelliJ) में भी। मैं इसे javadoc या kdoc में लिखने की गिनती नहीं कर रहा हूं क्योंकि आपके द्वारा उपयोग किए जा रहे फ़ंक्शन के लेखक ने इसे छोड़ा होगा।

+0

मैं यह नामुमकिन है लगता है। निम्नलिखित पर विचार करें: 'वैल cls = class.forName (ए); वैल विधि = cls.getMethod (बी); method.invoke() ', जहां' a' और 'b' फ़ाइल से पढ़े जाते हैं या उपयोगकर्ता इनपुट द्वारा प्रदान किए जाते हैं। कोड को निष्पादित करने से पहले आप कैसे जानते हैं कि इस कोड में कौन से अपवाद फेंकते हैं? –

+1

मेरा मतलब है आप जब तुम प्रतिबिंब का उपयोग प्रकार की जानकारी के सभी प्रकार के लापता होने के लिए जा रहे हैं। यदि आप जावा में प्रतिबिंब का उपयोग कर रहे थे तो क्या वही समस्याएं लागू नहीं होंगी? मुझे लगता है कि यह अभी भी उपयोगी होगा कि उन मामलों में अपवादों को कैसे फेंक दिया जा सकता है जहां संकलन समय पर प्रकार ज्ञात है। – zjuhasz

उत्तर

4

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

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

Kotlin जावाडोक @throws जावाडोक एनोटेशन का उपयोग आगे परिभाषा अपवाद है कि एक समारोह में फेंक दिया जा सकता है प्रदान करने के लिए कर सकते हैं। ये जावाडोक में और एफ 1 सहायता पॉपअप में दिखाई देते हैं। बेशक यह भी वैकल्पिक है।

+1

जावाडोक मेरे अपने कोड के लिए एक अच्छा समाधान है, लेकिन इस मुद्दे को कई पुस्तकालयों में जावाडोक छोड़ देता है एक बहुत वांछित होने के लिए और क्या तुम सच में डेवलपर पर भरोसा कर रहे हैं सब कुछ पर पूरी तरह से प्रलेखन है। मुझे लगता है मैं और अधिक IntelliJ में एक चेतावनी या जहां मैं मैन्युअल रूप से कुछ भी जाँच करने के लिए तो मैं गलती से एक पुस्तकालय समारोह है कि स्पष्ट नहीं है से एक अपवाद न भूलें नहीं होगा एक और उपकरण की तरह कुछ के लिए देख रहा था लगता है। ऐसा लगता है कि ऐसी बात अब तक मौजूद नहीं है:/ – zjuhasz

+1

हाँ, कि जिस तरह से अनियंत्रित अपवाद काम की तरह है। मुझे तुम्हारा दर्द पता है। –

+1

एफ 1 कुंजी? IntelliJ एक्शन नाम के बारे में बेहतर लिखें, शॉर्टकट नहीं जिसे रीमेप किया जा सकता है। मेरे लिए काम नहीं करता है। –

0

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

बेशक

यह केवल काम करता है कि इसका लाभ उठाने के तो मैं एक जवाब के रूप में इस अंकन नहीं कर रहा हूँ के साथ मदद करता है।

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

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