نمایش نتایج 1 تا 6 از 6

نام تاپیک: null قرار دادن یکی از کانستراکتور های تک پارامتری

  1. #1

    Question null قرار دادن یکی از کانستراکتور های تک پارامتری

    سلام
    من یه کلاس student دارم و یه کلاسی که یکی از خاصیتاش کلاس student هست .

    class Myclass(){
    private Student st;


    public Myclass(Student st){
    this.st=st;
    }
    public Myclass(Myclass clazz){
    this.st=clazz.st;

    کانستراکتور دومی برای اینکه که بتونم یه کپی از کلاس اصلی درست کنم . حالا میخام از Myclass یه کلاس جدیدnew کنم و توی کانستراکتوری که student میگیره مقدار null بدم ولی ارور میده میگه دوتا کانسترراکتور تک پاترامتری وجود داره یه همچین چیزی ، حالا چطور میتونم مشخص کنم که این مقدار برای کدوم کانسراکتور داده شده ؟ ینی چطور مشخص کنم که میخام برای کانستراکتوری که student میگیره مقدار null داده بشه ؟

  2. #2
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: null قرار دادن یکی از کانستراکتور های تک پارامتری

    نمیتونید تعیین کنید و قطعا خطا میده. چون null مشخص نیست مربوط به چه نوع آبجکتی هست. نباید null بدید یا یه تفاوتی داشته باشن این دو کانستراکتور. شما فرض کنید من میگم MyClass(null) میتونید بگید منظورم کدومه؟ نه، پس jvm هم نمیتونه تعیین کنه.
    معمولا برای چنین حالاتی مثلا یه حالات خاص ایجاد میکنند مثلا Student.NONE یا MyClass.NONE که در اصل آبجکت هستن ولی آبجکت خاصی هستند که راحت میتونن چک کنن. ولی بهترین راه تفاوت قائل شدن بین این دو کانستراکتور هست.

    اما برای کپی کردن از کلاس فعلی معمولا از کانستراکتور استفاده نمیکنن. می تونید متد clone رو override کنید. فقط حواستون باشه به این صورت که نوشتید باعث میشه دو تا آبجکت MyClass داشته باشید که هر دو st اشون یکی باشه و اگر محتوای یکی رو تغییر بدی اون یکی هم تغییر میکنه. اگر میخواید کامل متفاوت ولی با مقادیر یکسان باشند، باید در داخل متد clone کلاس MyClass از متد clone آبجکت st استفاده کنید که باز باید متد clone کلاس Student رو پیاده سازی کنید و اینکار به صورت سلسله مراتبی ادامه پیدا کنه تا جایی که به مقادیر primitive مثل int, double ... برسه یا به متغیرهای immutable مانند String.
    اگر چنین چیزی میخواستید لازمه این مفاهیمی رو که گفتم رو بدونید

  3. #3

    نقل قول: null قرار دادن یکی از کانستراکتور های تک پارامتری

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    فقط حواستون باشه به این صورت که نوشتید باعث میشه دو تا آبجکت MyClass داشته باشید که هر دو st اشون یکی باشه و اگر محتوای یکی رو تغییر بدی اون یکی هم تغییر میکنه.
    به نکته خوبی اشاره کردی حواسم به این موضوع نبود . ولی در این مورد نمیخاستم تغییری روش ایجاد کنم.

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    اما برای کپی کردن از کلاس فعلی معمولا از کانستراکتور استفاده نمیکنن. می تونید متد clone رو override کنید.
    در مورد این تو سایت stackoverflow یکی نوشته بود و این راه رو پیشنهاد داده بود که از کانستراکتور استفاده کنید و بهتره که از clone استفاده نکنید حالا چراش رو نمیدونم!
    فک کنم باید از clone استفاده کنم یا اینکه تفاوت بین کانستراکتور ها . تشکر

  4. #4
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: null قرار دادن یکی از کانستراکتور های تک پارامتری

    از کانستراکتور استفاده کنید و بهتره که از clone استفاده نکنید حالا چراش رو نمیدونم!
    درسته قبلا همچین چیزی رو خونده بودم، ولی منم علت اصلیش رو یادم نمیاد. شاید ممکنه پیاده سازی دقیقش دشوار باشه (مثلا همینکه گفتم به primitive بودن، immutable بودن، ایجاد آبجکت جدید برای هر شی و... توجه کنید) ولی copy constructor هم در برخی موارد ممکنه دردسر ساز بشه همونطور که در نتیجه گیری این مقاله اومده:
    https://www.javacodegeeks.com/2014/0...structors.html

  5. #5

    نقل قول: null قرار دادن یکی از کانستراکتور های تک پارامتری

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    درسته قبلا همچین چیزی رو خونده بودم، ولی منم علت اصلیش رو یادم نمیاد. شاید ممکنه پیاده سازی دقیقش دشوار باشه (مثلا همینکه گفتم به primitive بودن، immutable بودن، ایجاد آبجکت جدید برای هر شی و... توجه کنید) ولی copy constructor هم در برخی موارد ممکنه دردسر ساز بشه همونطور که در نتیجه گیری این مقاله اومده:
    https://www.javacodegeeks.com/2014/0...structors.html
    طبق نتیجه گیریش بهترین حالت، حالت 5ش بود که ترکیبی از دوتاست ینی هم کانستراکتور هم کپی ! ولی در کل کپی کردن یه آبجکت چقد دردسر داره
    تو زبان های دیگه مثه C#‎ یا C++‎ یا php هم همین مشکل هست آیا ؟

  6. #6
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: null قرار دادن یکی از کانستراکتور های تک پارامتری

    تو زبان های دیگه مثه C#‎‎ یا C++‎‎ یا php هم همین مشکل هست آیا ؟


    php فکر کنم داره. در اصل جاوا با متد clone و interface Clonable میخواسته این امکان رو بده که به صورت سلسله مراتبی هر کدوم clone بعدی رو در clone صدا میزنن و... . برای آبجکت های ساده کار سختی نیست.

    ضمنا اگر object Serializable باشه هم میتونید اول Serialize اش کنید و بعد deserialize و اینم ممکنه جواب بده. ولی در کل بله، این مشکل برای اکثر زبان های شی گرا وجود داره

تاپیک های مشابه

  1. تغییر دادن رنگ یکی از ستون های گرید
    نوشته شده توسط nimaaamin در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: سه شنبه 27 مرداد 1394, 10:52 صبح
  2. پاسخ: 8
    آخرین پست: سه شنبه 13 اسفند 1392, 12:06 عصر
  3. سوال: قرار دادن یکی از div روی قسمت های دیگر
    نوشته شده توسط MoMo121 در بخش طراحی وب (Web Design)
    پاسخ: 2
    آخرین پست: جمعه 21 تیر 1392, 10:55 صبح
  4. تغییر دادن فیلد یکی از پنجره های ویندوز؟
    نوشته شده توسط سپهر-111 در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: جمعه 05 اسفند 1390, 16:52 عصر
  5. تغییر رنگ یکی از سلول های فلکس گرید
    نوشته شده توسط rezaei manesh در بخش VB.NET
    پاسخ: 0
    آخرین پست: سه شنبه 13 اردیبهشت 1384, 16:29 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •