درمورد استاتیک در کاتلین

پرسیده شده
فعالیت 1056 روز پیش
دیده شده 848 بار
0

سلام روزتون بخیر 

استاد توی ویدیو فرمودند که یک کمپانیون ابجکت داریم که میاد متد ها و متغییر های داخلش رو اتاتیک می کنه ولی نه مثل جاوا که اگر بخوایم مثل جاوا بشه یک انوتیشن اضافه کردند.

می خواستم بدونم که فرق این دو در کجاست؟؟

ممنون

فایل پیوست

رحیم محمودزاده
رحیم محمودزاده

17 خرداد 00

1
حذف شده

سلام وقت بخیر

 

میدانیم برای دو روش بالا دسترسی به اعضای یک کلاس نیازی به ساخت شی نداریم. اما فرق این دو چیست؟

در companion object کاتلین اجازه میده که ابجکت هایی رو تعریف کنیم که رفتار static طوری داشته باشند این باعث میشه در ظاهر ما static داشته باشیم .

مثلا هنگامی که در کلاس Person می اییم و companion تعریف میکنیم مثل این هست که ابتدا از Person یک شی گرفته باشیم و سپس آن متغیر موجود companion رو صدا بزنیم (این عمل در پشت زمینه انجام میشه بخاطر همین میگیم رفتار شبه static داریم) کد رو اگر decompile کنین بهتر متوجه میشید

 

اما وقتی به قول شما از انوتیشن @jvmstatic استفاده میکنیم دقیقا رفتار مشابه استاتیک های جاوا رو داریم یعنی در پشت زمینه شیی ساخته نمیشود تا به مقدارمان دسترسی پیدا کند. و شما با صدا زدن نام کلاس و سپس متغیر میتونین به مقدار دسترسی پیدا کنین

 

پیشنهاد میشه *زیادی از static های واقعی استفاده نکنین(نه اینکه استفاده نکنین) چون زباله روب جاوا نمیتونه static های واقعی رو از heap حذف کنه. 

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

17 خرداد 00