ما الفئة الفرعية التي يمكن القبض عليها والتي لا ينبغي؟

StackOverflow https://stackoverflow.com/questions/2146108

  •  23-09-2019
  •  | 
  •  

سؤال

يقول API Doc لا يلتقط أبدًا رمي الفئة الفرعية خطأ مما يدل على السلوك غير الطبيعي. هل يعني ذلك أن الفصل بين الخطأ والاستثناء هو إخبار المبرمجين بما يجب اكتشاف الفئة الفرعية وأيها لا ينبغي؟ أو هناك المزيد لذلك؟

هل كانت مفيدة؟

المحلول

على العموم، Error هو شيء خاطئ على محمل الجد (في كثير من الأحيان داخل المنصة نفسها) والتي لم تستطع التعامل معها. الأوقات الوحيدة التي أهتم بها على الإطلاق Error من أجل تسجيلها, ، وبعد ذلك أعيد ترميمه.

هذا مهم للغاية لأنه من السهل السماح للأخطاء (واستثناءات وقت التشغيل) بنشر مكدس المكالمات بطريقة لا يتم تسجيلها أبدًا (على سبيل المثال باستخدام executorService.submit(Runnable) دون الاستماع إلى العائد Future)

Errorعادة ما تكون أشياء مثل:

  • خارج الذاكرة
  • خطأ في طريقة التجريد (على سبيل المثال ، ضد إصدار مختلف من المكتبات لتلك المصممة ضد)
  • التأكيدات (أي محددة من قبل المبرمجين الثوابات, أو الأشياء التي يجب ألا تحدث أبدًا - لول!)

أود أن أقول ذلك RuntimeExceptionعادة (وإن لم يكن دائمًا) يدل على برمجة الأخطاء:

  • عدم التحقق من فارغ ، أو يمر بالفارغ
  • تمرير وسيطات غير صالحة ، أو السماح بحالة غير صالحة
  • تعديل مجموعة كما تتكرر عليها

عادةً ما أوصي بالفشل في هذه الأشياء أيضًا ، لكن هذه منطقة رمادية ؛ ربما لا تتحقق من إدخال المستخدم قبل نقله إلى الخادم -يستحق تحطيم تطبيقك!

التحقق Exceptionيجب استخدام S (أي غير المحدد) للأشياء التي يمكن أن تتوقع أن تحدث بشكل معقول والتعامل مع معقول (أو يمكن تصورها) في الكود الخاص بك. أنا شخصياً أحب الاستثناءات التي تم فحصها ، لكن يتم تقديمها مرهقة بسبب الأناقة/التكرار المشاركة في التعامل مع أنواع الاستثناءات المتميزة بنفس الطريقة (أي في كتل الصيد المتعددة). اللغات مثل Scala لديها بناء جملة أفضل بكثير ، ولكن بعد ذلك أزالوا مفهوم التحقق استثناءات كذلك!

نصائح أخرى

نعم ، أعتقد أن تحليلك صحيح هنا - ليس من المفترض أن تصطاد ErrorS لأنها تمثل أخطاء وقت التشغيل التي لا يمكن استردادها ، مثل OutOfMemoryError.

السبب الوحيد للقبض Throwable إذا كنت تقوم بتشغيل رمز طرف ثالث خارجي غير ضروري للتشغيل الصحيح لبرنامجك - إذا كنت لا تثق في هذا الرمز ، فانتقل إلى كل شيء ، وإذا كنت قد حصلت على أشياء لم تتوقعها (Throwable) ثم تعطيل هذا الرمز والإبلاغ عنه.

كما قد يكون من الجيد التمييز بين Exception و RuntimeException.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top