+1 امتیاز
قبل در برنامه نویسی توسط (59 امتیاز)
ویرایش شده قبل توسط

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

 

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

 

 

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

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

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

1 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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

سوالات مشابه

+2 امتیاز
2 پاسخ 2.2هزار بازدید
+1 امتیاز
1 پاسخ 636 بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
+1 امتیاز
1 پاسخ 794 بازدید
0 امتیاز
2 پاسخ 736 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 1.7هزار بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 880 بازدید
...