چرا در جاوا با قراردادن کلمه کلیدی final میتوانیم متغیر ها را در متدهای inner class استفاده کنیم؟

+1 رأی
میانگین بازدید روزانه 0.27645 بازدید

به خط کدهای زیر توجه کنید :

 

در کدهای بالا ما نمیتونستیم شی tv رو در onClick شناسایی کنیم و جاوا به ما اخطار داد که میتونید از final استفاده کنید.
به این شکل :

 

 

با قراردادن کلمه  final پشت textview تونستیم از اون در onClick استفاده کنیم.

سوال من اینه : final برای این استفاده میشد که یک متغیر فقط یکبار بتونه مقدار بگیره و بار دیگه نتونه مقدار دریافت کنه.

الان در اینجا final چه نقش و چه تعریفی داره و دقیقا چطور باعث شناسایی شی ما در onClick شده؟

سوال 6 سال قبل در تالار برنامه نویسی توسط mahdi-mortazavi (59 امتیاز)
ویرایش 6 سال قبل توسط Saeed Zarinfam

1 جواب

0 رأی
 
بهترین جواب

این داستان کمی پیچیدس ولی سعی می کنم به زبان ساده براتون توضیح بدم. وقتی شما یک شئ از کلاس OnClickListener را بصورت anonymous inner class در کد خود ایجاد می کنید، تمام متغییر های در سطح متد onCreate که درون anonymous inner class ایجاد شده استفاده شده اند درون شئ آن کپی می شوند. حالا شرایطی را در نظر بگیرید که بتوان reference درون متغیر tv را درون متد onCreate تغییر داد (دقیقا بعد از خط setOnClickListener) در حالی که درون شئ anonymous inner  class ایجاد شده داریم از reference قبلی استفاده می کنیم که این باعث می شود کد آن چیزی که ما انتظار داریم را انجام ندهد. برای جلوگیری از این شرایط شما باید متغیر های محلی را که می خواهید درون anonymous inner class استفاده کنید final کنید.

جواب 6 سال قبل توسط Saeed Zarinfam (1,044 امتیاز)
انتخاب شده در 6 سال قبل توسط mahdi-mortazavi

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.19443 بازدید
+2 رأی
2 جواب میانگین بازدید روزانه 0.582,058 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.13428 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.381,426 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.26746 بازدید
0 رأی
2 جواب میانگین بازدید روزانه 0.19688 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.461,664 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.16423 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.28792 بازدید
کانال تلگرام جواب یاب
...