Generic in java First section
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
Generics ویژگیای در جاوا که به برنامهنویس اجازه میدهد نوع دادهها را به صورت پارامتری تعیین کند. این ابزار مانند قالبهایی عمل میکند که میتوان آنها را با انواع مختلف داده (مانند
String،Integerیا کلاسهای سفارشی) پر کرد، بدون اینکه نیاز به بازنویسی کد باشد. -
Type Safety تضمین امنیت نوع داده در زمان کدنویسی. این ویژگی باعث میشود که اشتباهات مربوط به نوع داده، به جای زمان اجرا، در همان زمان کامپایل شناسایی شوند.
-
Casting فرآیند تبدیل صریح یک شیء از نوع عمومی (مانند
Object) به یک نوع خاصتر (مانندPerson). پیش از جنریکها، برای بازیابی دادهها از لیستهای عمومی، استفاده ازCastingالزامی بود. -
ClassCastException یک خطا یا
Exceptionکه در زمان اجرا (Runtime) رخ میدهد. این خطا زمانی ایجاد میشود که برنامه سعی کند شیئی را به کلاسی کست کند که با آن همخوانی ندارد (مثلاً تبدیل یک خودرو به یک انسان). -
Compile Time vs Runtime زمان کامپایل دورهای است که کدهای نوشته شده توسط کامپایلر بررسی و ترجمه میشوند. زمان اجرا دورهای است که برنامه در حال کار است. جنریکها خطاها را از زمان اجرا به زمان کامپایل منتقل میکنند تا برنامه در حین استفاده کرش نکند.
-
Code Reusability قابلیت استفاده مجدد از کد. جنریکها اجازه میدهند یک کلاس یا متد را یکبار بنویسیم و با انواع مختلف داده از آن استفاده کنیم، که این کار باعث تمیزتر شدن و بهینه شدن برنامه میشود.
موارد مصاحبه ای
-
چرا استفاده از Generics نسبت به استفاده از کلاس Object برتری دارد؟ هرچند کلاس
Objectقابلیت ذخیره هر نوع دادهای را فراهم میکند و باعثReusabilityمیشود، اما امنیت نوع ندارد. باObjectخطاهای کستینگ در زمان اجرا (Runtime) مشخص میشوند و باعث کرش برنامه میشوند، اما با Generics این خطاها در زمان کامپایل (Compile-time) شناسایی میشوند. -
مزایای اصلی استفاده از Generics در جاوا چیست؟ ۱. افزایش امنیت نوع (Type Safety). ۲. حذف نیاز به
Explicit Casting(کست کردن دستی). ۳. شناسایی باگها در زمان کامپایل. ۴. کدنویسی تمیزتر و قابلیت استفاده مجدد. -
Generics از کدام نسخه به جاوا اضافه شد؟ این ویژگی از نسخه Java 5 معرفی شد.
-
در چه بخشهایی از برنامه میتوان از Generics استفاده کرد؟ جنریکها در کلاسها (مانند کلاس
Stack)، متدها و اینترفیسها (مانندComparableیاIterator) قابل استفاده هستند.
سناریو کاربردی
در این آموزش، یک کلاس DynamicArray (لیست پویا) بررسی شده است که از آرایهای از جنس Object برای ذخیره دادهها استفاده میکند.
مشکل سناریو بدون جنریک:
وقتی میخواهیم اشیایی از کلاس Person را در این لیست ذخیره کنیم، هنگام بازپسگیری داده، متد خروجی از جنس Object است. برای دسترسی به ویژگیهای کلاس Person (مثلاً متد printFullName)، مجبوریم خروجی را به Person کست کنیم.
خطر جدی:
اگر برنامهنویس به اشتباه بخواهد دادهای را که از جنس Person است به کلاس دیگری مثل Car کست کند، کامپایلر جاوا متوجه این اشتباه نمیشود. در نتیجه، برنامه اجرا شده و ناگهان در زمان اجرا با خطای ClassCastException متوقف (Crash) میشود.
راهکار با جنریک:
با استفاده از جنریک، ما از همان ابتدا به لیست میگوییم که فقط اجازه ورود و خروج نوع Person را دارد. در این حالت، دیگر نیازی به نوشتن کدهای کستینگ نیست و اگر اشتباهی در نوع داده رخ دهد، کامپایلر اجازه اجرای برنامه را نمیدهد و همان لحظه به برنامهنویس هشدار میدهد.
بیشتر بدانید
-
کاربرد در کتابخانههای جاوا مفهوم جنریک به وفور در ساختار کالکشنهای جاوا و اینترفیسهای مهمی مثل
ComparableوFunctionاستفاده شده است. -
تمیزی کد (Clean Code) استفاده از جنریکها باعث میشود کدهای اضافه مربوط به تبدیل انواع (Casting) حذف شوند، که این امر منجر به خوانایی بیشتر و نگهداری آسانتر کد میشود.
