خطای ناشی از نبود override در بالای متد ها در Eclipse
پس از Import کردن سایر پروژه های موجود در اینترنت، یا سورس دیگران، تعداد زیادی خطا مبنی بر نبود @Override در بالای متدها از طرف Eclipse اعلام میشه. روش درست کردن این خطاها چیست؟
پاسخ بسیار ساده است اما قبل از ارائه پاسخ باید بگویم:
@Override چیست؟
بهش می گن Override Annotation و کاربردش معرفی متدهایی هست که در کلاس پدر قرار هست مجدداً ویرایش بشن. بنابراین اگر در کلاسی این متد وجود داشته باشه و زیر کلاسی هم قرار باشه این متد رو با همان Signature تعریف کنه پس در واقع Override ـش کرده.
چرا در Eclipse موجود در سایت باید Override بالای متدها باشد؟
از من بشنوید، چه بسیار پروژه هایی دیده ام که شرکت های بزرگ نرم افزاری را به دردسر انداخته بود و مشکل آنها در نبود علامت @Override در بالای متد بوده است. فرض کنید متدی با Signature زیر در کلاس پدری تعریف شده باشد:
public void someMethod(int test){
// some statement
}
حالا برنامه نویس سعی دارد با معرفی متد زیر کلاسی از کلاس فوق این متد را ویرایش کند و می نویسد:
public void someMethod(float test){
// some another statement
}
حالا این برنامه نویس بیچاره، مدت ها سرکار خواهد بود تا متوجه شود که یک متد دیگر با Signature دیگری تعریف کرده و عملاً هیچ متدی را Override نکرده است و در این جهل می ماند و می سوزد.
راه حل اجباری کردن Override برای متد هاست. اگر استفاده از Override اجباری باشد، Eclipse به برنامه نویس خطا می دهد که متدی با Signature کلاس پدر تعریف کرده است اما Override Annotation نگذاشته است. پس اگر برنامه نویس این خطا را نگرفت یعنی چیزی را Override نکرده است.
غیر از موضوع بالا، چالش های زیر هم بوجود می آید:
- تصور کنید که Signature یک متد به اشتباه در کلاس پدر تغییر کند، بی آنکه در کلاسهای زیر آن تغییر نکند. آنوقت برنامه بی دلیل از کار می افتد و دچار خطاهای نوع سوم ( بدترین نوع خطا ) بیشماری می شود.
- باز هم تصور کنید که یک متدی هم Signature با متد پدر تعریف شده باشد ولی قصد برنامه نویسی قصد Override کردن چیزی را نداشته. بنابراین آن متد خود به خود در شرایطی اجرا می شود و برنامه نویس دچار خطای نوع سوم ( بدترین نوع خطا ) می شود.
پس اگر اینقدر این موضوع مهم است، چرا برنامه نویسان به آن بی توجهند؟
این را حمل بر بی تجربگی این برنامه نویسان بدانید و اینکه هنوز به دلیل تجربه کمشان در پروژه های بزرگ، متوجه این موضوع نبوده و نیستند. پس شما اشتباه آنها را تکرار نکنید. مطمئناً هر برنامه نویس باهوش، خطاهای Realtime خود را باید به خطای Compile Time تبدیل کند و استفاده از Override Annotation یکی از مهمترین آنهاست.
چطور پروژه هاییکه برای آنها Override Annotation گذاشته نشده را تصحیح کنیم؟
دو روش بسیار ساده:
1- می توانید در Problems سطر هایی که خطای @Override را دارند انتخاب کنید و Quick Fix بزنید و به همه متدهای مورد نیاز @Override اضافه می شود.
2- می توانید از قسمت زیر وجود یا عدم وجود @Override را به Warning یا Ignore تبدیل کنید ( بجای Error ) که به هیچ عنوان توصیه نمی کنم.
Eclipse -> Window Menu -> Preferences -> Java -> Compiler -> Errors/Warnings -> Annotations -> Missing '@Override' Annotation -> Select Ignore From Combobox
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .