فهم الصب الصريح واستثناء ClassCastException في Java
في Java، يمكننا استخدام الصب الصريح لتعيين كائن فئة فائقة لمتغير فئة فرعية. على سبيل المثال، خذ بعين الاعتبار الكود التالي:
public class Animal { public void eat() {} } public class Dog extends Animal { public void eat() {} public static void main(String[] args) { Animal animal = new Animal(); Dog dog = (Dog) animal; } }
على الرغم من نجاح تجميع الكود، إلا أن تنفيذ السطر Dog dog = (Dog) Animal; يطرح ClassCastException في وقت التشغيل.
لماذا يحدث هذا الخطأ؟
يسمح المترجم بالصب الصريح، لكنه لا يستطيع ضمان صحة الإرسال في وقت الترجمة. عندما تقوم بنقل كائن من فئة فائقة إلى فئة فرعية، فإنك بشكل أساسي تطلب من المترجم أن يثق في أن الكائن هو في الواقع مثيل للفئة الفرعية.
في مثالنا، الحيوان المتغير هو مثيل للحيوان فصل. ومع ذلك، فإن تحويله إلى كائن كلب يفترض ضمنيًا أن الحيوان يشير إلى كائن كلب، وهذا ليس هو الحال. ومن ثم، يتحقق JVM من صحة هذا الافتراض في وقت التشغيل ويطرح استثناء ClassCastException عندما يفشل.
كيف يمكننا منع مثل هذه الأخطاء؟
لإجراء الإرسال الصريح بأمان، يجب علينا قم بإجراء الفحوصات التالية:
باختصار، يسمح لنا الإرسال الصريح بتجاوز فحص النوع للمترجم، ولكن من الضروري التعامل معه بحذر والتحقق من صحة الإرسال قبل الاعتماد عليه.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3