آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

خطای ناشی از نبود override در بالای متد ها در Eclipse

uncocoder  10 سال پیش  9 سال پیش
+48 0

پس از Import کردن سایر پروژه های موجود در اینترنت، یا سورس دیگران، تعداد زیادی خطا مبنی بر نبود @Override در بالای متدها از طرف Eclipse اعلام میشه. روش درست کردن این خطاها چیست؟

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
uncocoder  10 سال پیش
+34 0

پاسخ بسیار ساده است اما قبل از ارائه پاسخ باید بگویم:

@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

 

+1 0
سلام اقای اقاجانی ممنون بابت توضیحات خوبتون من sliding menu library رو توی اکلیپس import کردم ولی تعداد زیادی خطا داشت بعضی از خطا ها همین خطای override بود که برطرف شد و یسری از خطاها هنوز مونده کاش اموزش import کردن و استفاده کردن از library ها رو سریع تر می ذاشتید (10 سال پیش)
+1 0
در حال تدوین است، دیروز بخشی از اون رو ضبط کردم. (10 سال پیش)
+4 0
دوستان در مواردی که از پاسخی یا سئوالی خوشتون میاد، از دکمه ستاره کنار اون برای رأی دادن استفاده کنید و از درج نظر در این موارد خودداری کنید، نظر ها متأسفانه پاک شد. با تشکر (10 سال پیش)
0 0
استاد بسیار بسیار عالی ستاره زدم نظرم دادم... (10 سال پیش)
0 0
در برخی مواردی که ارور override وجود دارد ارور در مورد R هم هست و زمانی که ارور override رو به حالت ignore میبریم ارور R هم برطرف میشود اما زمانی که ارور override رو quick fix میکنیم ارور R همچنان وجود دارد , اون رو چطور از بین ببریم ؟ (10 سال پیش)
+2 0
کافیست به استاندارد هایی که در تولید منابع هنری بیان شده، توجه کنید. مثل نام فایلها، نام دایرکتوری ها، تعریف فایلهای XML و ...همینطور در پنل Problems همه خطاها دیده می شود. (10 سال پیش)
0 0
من وقتی سورس import میکنم، بهم میگه Override هارو حذف کن!! بنظرتون چرا؟ البته وقتی اینکارو میکنم error ها برطرف میشن (9 سال پیش)
0 0
در بالا توضیح دادیم در موردش دقیقاً (9 سال پیش)
0 0
من وقتی یه متد مثل OnClickListener تعریف می کنم override رو نمیاره و وقتی خودم اونو مینویسم می گه باید اون override پاکش کنی و این متد از سوپرکلاسش override کنی مشکلش کجاس؟؟؟؟ (9 سال پیش)
+2 0
آقا واسه من یه تغییری ایجاد شد و یهو همه override ها خطا گرفته و میگه باید حذف بشن ، چیکار کنم درست شه ؟ آقا خواهش میکنم کسی میتونه راهنمایی کنه همه پروژم به مشکل خورده ، یه گزینه مبنی بر اینکه کامپایل با ورژن ۱.۷ باید انجام بشه نشون داد و دیگه Undo نشد (9 سال پیش)
0 0
استاد عزیز ممنون از راهنمایی ارزشمندتون (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .