استاد توی ویدیو فرمودند که یک کمپانیون ابجکت داریم که میاد متدها و متغییرهای داخلش رو اتاتیک میکنه ولی نه مثل جاوا که اگر بخوایم مثل جاوا بشه یک انوتیشن اضافه کردند.
می خواستم بدونم که فرق این دو در کجاست؟؟
ممنون
سلام وقت بخیر
میدانیم برای دو روش بالا دسترسی به اعضای یک کلاس نیازی به ساخت شی نداریم. اما فرق این دو چیست؟
در companion object کاتلین اجازه میده که ابجکت هایی رو تعریف کنیم که رفتار static طوری داشته باشند این باعث میشه در ظاهر ما static داشته باشیم .
مثلا هنگامی که در کلاس Person میاییم و companion تعریف میکنیم مثل این هست که ابتدا از Person یک شی گرفته باشیم و سپس آن متغیر موجود companion رو صدا بزنیم (این عمل در پشت زمینه انجام میشه بخاطر همین میگیم رفتار شبه static داریم) کد رو اگر decompile کنین بهتر متوجه میشید
اما وقتی به قول شما از انوتیشن @jvmstatic استفاده میکنیم دقیقا رفتار مشابه استاتیکهای جاوا رو داریم یعنی در پشت زمینه شیی ساخته نمیشود تا به مقدارمان دسترسی پیدا کند. و شما با صدا زدن نام کلاس و سپس متغیر میتونین به مقدار دسترسی پیدا کنین
پیشنهاد میشه *زیادی از staticهای واقعی استفاده نکنین(نه اینکه استفاده نکنین) چون زباله روب جاوا نمیتونه staticهای واقعی رو از heap حذف کنه.