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

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

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

 

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

 

 

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

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

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

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

1 جواب

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

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

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

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

0 رأی
1 جواب میانگین بازدید روزانه 0.2258 بازدید
+2 رأی
2 جواب میانگین بازدید روزانه 0.641,621 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.12259 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.391,050 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.24438 بازدید
0 رأی
2 جواب میانگین بازدید روزانه 0.2519 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.561,445 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.19297 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.22390 بازدید
کانال تلگرام جواب یاب
...