کپی با بازتاب (تا پایان جلسه نوزدهم)
سطح سوال: متوسط
آنچه از این جلسه باید بدانید: آشنایی با مفهوم بازتاب در جاوا، آشنایی با شی کلاس (Class Object)
بستهی ir.javacup.reflection را دانلود کنید. داخل این بسته کلاس Copier.java وجود دارد. این کلاس تنها یک متد copy دارد که دو شی o1 و o2 از جنس Object را به عنوان پارامتر دریافت کرده و به صورتی که در ادامه توضیح داده میشود، شی o1 را داخل شی o2 کپی میکند (مقادیر ویژگیهای شی o2 را برابر با مقادیر ویژگیهای شی o1 قرار میدهد).
باید یک سازنده (constructor) برای این کلاس بسازید که 0 یا چند رشته را به عنوان ورودی بتواند دریافت کند. هنگام ایجاد شیای از این کلاس، اگر هیچ رشتهای را به عنوان ورودی به سازنده ندهیم و در واقع به صورت زیر عمل کنیم:
Copier copier = new Copier();
یعنی باید مقادیر تمامی ویژگیهای o1، در ویژگیهای متناظر o2 کپی شود.
اما اگر مانند زیر:
Copier copier = new Copier("name", "age");
یک یا چند رشته به عنوان ورودی به سازنده داده شود، تنها مقادیر ویژگیهایی از o1 که نامشان به صورت رشته به سازنده داده شده است، باید در ویژگیهای متناظر o2 کپی شوند. در مثال بالا، فقط مقادیر ویژگیهای name و age کپی میشود و مقادیر سایر ویژگیهای o2 تغییر نمیکند.
نکات:
- فرض بر این است که تمام ویژگیهای کلاس اشیایی که در ورودی داده میشوند، حتما دارای setter و getter مناسب هستند و نام آنها نیز طبق قراردادهای نامگذاری (naming conventions)، درست و صحیح است. مثلا برای ویژگی name، دو متد با نامهای setName و getName وجود دارد.
- اگر یکی از ویژگیهای o1 برابر با null باشد، ویژگی متناظر در o2 نیز پس از عملیات کپی کردن باید برابر با null باشد.
- بری سادگی، ویژگیهای کلاس اشیایی که در ورودی داده میشوند، یکی از سه نوع زیر هستند:
- primitive data types مانند long ،double ،int و …
- primitive wrapper class مانند Long ،Double ،Integer و …
- String
آنچه باید آپلود کنید:
یک فایل زیپ شامل بستهی ir.javacup.reflection است. به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخهی ir را ببینیم که درون آن شاخهی javacup و درون آن نیز شاخهی reflection قرار دارد. در داخل شاخهی reflection فقط فایل Copier.java وجود دارد.
برای داوری تمرین، میتوانید پاسخ خود را در سایت Quera به نحوی که در بالا گفته شد، بارگذاری کنید.
با ما همراه باشید:
آدرس کانال تلگرام: IranianJavaDevelopers@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers
چرا امکان آپلود وجود نداره؟؟؟
سلام
مطمئن شوید که در حساب شخصیتون در کوئرا وارد شده باشید (login کرده باشید) و اینکه در مسابقه «تمرینهای آموزشی جاواکاپ» هم دکمه عضویت را زده باشید.