ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
بخاطر اینکه نتونیم تغییرش بدیم یا مساوی یه شئ جدید بگذاریمش. فاینال شدنش به این معنا نیست که خصوصیاتش رو مثل text و... نمیشه تغییر داد بلکه خودش رو نمیشه مساوی یه شئ جدید قرار داد (عملگر انتساب دیگه روش کار نمیکنه). علت این موضوع اینه که جاوا میخواد مطمئن بشه که Threadهای دیگه و دستوراتی که داخل Runnableها مینویسید، اشیاء رو دستکاری نمیکنن چون قراره احتمالاً بعدش دوباره توی متد یه کارهایی روی اون عناصر صفحه انجام بشه.
ممکنه با خودتون بگین خوب من که نمیخوام تغییرش بدم ولی جاوا نمیتونه روی احتمالات تصمیمگیری کنه. یه زبان سختگیره که نمیگذاره حتی درصورت تمایلتون، برنامه با الگوی بد بنویسید. بنابراین سختگیری میکنه و میگه هروقت یه مقداری رو برای یه Runnable دیگه فرستادین، اون رو final کنین که نتونه دستکاریش کنه.
دقت کنید فاینال شدن فقط عملگر انتساب رو غیرفعال میکنه و ربطی به Propertyهای اشیاء نداره.
ارسالها: 238
موضوعها: 35
تاریخ عضویت: شهریور 1394
تشکرها: 77
123 بار تشکر شده در 78 پست
گذشته از اینا که مهندس شهرکی گفت، من توی منابعی خوندم که final کردن باعث میشه جاوا بتونه یکسری بهینه سازی های قابل توجهی رو روی کد انجام بده که در غیر اینصورت نمیتونست؛ چون میدونه و تضمین وجود داره که مقدار این متغییرها تغییر نخواهد کرد، پس میتونه یکسری بهینه سازیهایی رو که نیاز به چنین تضمین هایی دارن انجام بده.
پس اینکه متغییرهایی که تغییر نمیکنن رو فاینال کنیم بنظرم از نظر پرفورمنس برنامه مفیده.
البته منکه خودم حال و حوصله ندارم موقع کدنویسی دنبال این چیزا باشم، چون بالاخره توجه و انجام این جزییات وقت و انرژی صرف میکنه که آدم رو از مسائل اصلی و دارای اولویت بالاتر منحرف میکنه. ولی بعدا که برنامه کامل و پایدار شد بنظرم فرصت بهتری برای توجه و انجام اینطور جزییات پیش میاد (البته به شرطی که برنامهء مورد نظر ارزش و نیازش رو داشته باشه).