دانستنی‌ها

۵ راه مختلف برای ساختن اشیا در جاوا

توسعه‌دهندگان جاوا معمولا هر روز تعداد زیادی شئ می‌سازند. شاید ما همیشه از سیستم‌های مدیریت وابستگی مثل Spring استفاده می‌کنیم تا این اشیا را بسازیم. اما راه‌های زیادی برای ساخت اشیا وجود دارند که در این مطلب به آن‌ها اشاره می‌کنیم.

۵ راه کلی برای ساخت اشیا در جاوا وجود دارد که با مثال توضیح می‌دهیم:

 constructor فراخوانی می‌شود استفاده از کلمه کلیدی new
 constructor فراخوانی می‌شود استفاده از تابع newInstance از کلاس Class
 constructor فراخوانی می‌شود استفاده از تابع newInstance از کلاس Constructor
 بدون فراخوانی constructor استفاده از تابع clone
 بدون فراخوانی constructor استفاده از deserialization

اگر که برنامه‌ای که در پایان داده شده است را بررسی کنید، خواهید دید که توابع ۱،۲،۳ از constructor برای ساختن اشیا استفاده می‌کنند در حالیکه ۴،۵ بدون constructor اشیا را می‌سازند.

۱. استفاده از کلمه کلیدی new:

رایج‌ترین و معمول‌ترین راه برای ساختن اشیا و ساده‌ترین آن‌هاست. با استفاده از این روش می‌توانیم هر constructorای که می‌خواهیم را صدا بزنیم (بدون آرگومان یا با پارامتر)

۲. استفاده از تابع newInstance از کلاس Class

این متد constructor بدون آرگومان را فراخوانی می‌کند تا اشیا را بسازد.
ما می‌توانیم یک شی را با newInstance به این شکل بسازیم:

یا

۳. استفاده از تابع newInstance از کلاس Constructor

مشابه تابع newInstance از کلاس Class، یک تابع newInstance در کلاس java.lang.reflect.Constructor وجود دارد که می‌توانیم برای ساخت اشیا از آن استفاده کنیم. به علاوه می‌توانیم یک constructor با پارامتر و یک private constructor هم با این روش فراخوانی کنیم.

هر دوی این توابع newInstance به عنوان راه‌های بازتابی برای ساخت اشیا شناخته می‌شوند. در حقیقت این متد در کلاس Class از همین متد در کلاس Constructor استفاده می‌کند. به همین دلیل دومی ترجیح داده ‌می‌شود و در اغلب چارچوب‌ها مثل Spring، Hibernate، Struts و … مورد استفاده قرار می‌گیرد. برای اینکه تفاوت بین این دو متد را بهتر متوجه شوید این مطلب را بخوانید.

۴. از تابع clone استفاده کنید.

هروقت تابع clone را روی هر شئی صدا می‌زنیم، JVM دقیقا یک شی برای ما می‌سازد و تمام محتویات شئ قبلی را در آن کپی می‌کند. با این راه هیچ constructorای صدا نمی‌شود.
برای استفاده از متد clone روی شئ نیاز داریم اینترفیس Clonable را پیاده سازی کرده و متد clone را در آن تعریف کنیم:

۵. استفاده از deserialization

هر زمانی که شئی را serialize و deserialize می‌کنیم، JVM یک شی جدا برای ما می‌سازد. در deserialization، JVM از هیچ constuctorای برای ساخت اشیا استفاده نمی‌کند.
برای deserialize کردن یک شئ لازم است اینترفیس Serializable را در کلاسمان پیاده‌سازی کنیم:

 261: invokevirtual #118 // Method java/io/ObjectInputStream.readObject:()Ljava/lang/Object;

همانطور که در بایت کد بالا دیده می‌شود، همه چهار متد صدا زده شده و به invokevirtual که ساخت شئ مستقیم توسط این متدها مدیریت می‌شود تبدیل شده است. به جز در مورد اول که به دو فراخوانی تبدیل شده است. یکی از آن‌ها new و دیگری invokespecial است.

مثال:

کلاس کارمند را درنظر بگیرید:

در برنامه‌جاوا زیر می‌خواهیم به پنج راه مختلف از این کلاس نمونه بسازیم. کد آن در گیت هاب هم در دسترس است:

این برنامه خروجی زیر را دارد:

منبع:

https://dzone.com/

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا