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

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

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

 

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

 

 

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

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

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

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

1 جواب

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

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

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

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

0 رأی
1 جواب میانگین بازدید روزانه 0.2180 بازدید
+2 رأی
2 جواب میانگین بازدید روزانه 0.681,452 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.13241 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.41939 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.25364 بازدید
0 رأی
2 جواب میانگین بازدید روزانه 0.22487 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.611,335 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.23265 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.25340 بازدید
کانال تلگرام جواب یاب
...