فاینال بودن یک متغییر

ساخت وبلاگ
سلام
هدف از اینکه یک متغییر رو فاینال می کنیم چیه ؟
مثلا توی این کد
final int p =11;
btn_0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { edt_result.setText("p"+p); }
});
چرا ما نباید بعدا بتونیم p  رو تغییر بدیم؟

تشکر شده توسط:

بخاطر اینکه نتونیم تغییرش بدیم یا مساوی یه شئ جدید بگذاریمش. فاینال شدنش به این معنا نیست که خصوصیاتش رو مثل text و... نمیشه تغییر داد بلکه خودش رو نمیشه مساوی یه شئ جدید قرار داد (عملگر انتساب دیگه روش کار نمیکنه). علت این موضوع اینه که جاوا میخواد مطمئن بشه که Threadهای دیگه و دستوراتی که داخل Runnableها مینویسید، اشیاء رو دستکاری نمیکنن چون قراره احتمالاً بعدش دوباره توی متد یه کارهایی روی اون عناصر صفحه انجام بشه.

ممکنه با خودتون بگین خوب من که نمیخوام تغییرش بدم ولی جاوا نمیتونه روی احتمالات تصمیم‌گیری کنه. یه زبان سختگیره که نمیگذاره حتی درصورت تمایلتون، برنامه با الگوی بد بنویسید. بنابراین سختگیری میکنه و میگه هروقت یه مقداری رو برای یه Runnable دیگه فرستادین، اون رو final کنین که نتونه دستکاریش کنه.

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

تشکر شده توسط:

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : خنجی prog بازدید : 138 تاريخ : جمعه 4 تير 1395 ساعت: 14:10

خبرنامه