جلسه شماره 85رایگان

Generic Method

00:10:53

توضیحات جلسه

🎥 این ویدیو قسمت هفتاد و هشتم از بوت‌کمپ رایگان جاواست. 📚 Generics – درک کامل Generic Methods در جاوا در این جلسه می‌ریم سراغ یکی از مهم‌ترین و البته پرکاربردترین ویژگی‌های جنریک در جاوا: ✨ Generic Method (متدهای جنریک) ✨ توی این ویدیو با مثال‌های ساده و قابل فهم یاد می‌گیریم که متد جنریک دقیقاً چیه، چطور ساخته می‌شه و چه زمانی باید ازش استفاده کنیم. این بخش کمک می‌کنه کدهای ساختارمندتر، تمیزتر و قابل‌استفاده‌ مجدد (Reusable) بنویسی. در این ویدیو بررسی می‌کنیم: 🔹 تعریف و ساختار متدهای جنریک – با یک توضیح پایه‌ای، یاد می‌گیریم که متد جنریک چه شکلیه و چرا اصلاً وجود داره. 🔹 نحوه استفاده عملی از Generic Method – با مثال‌های کاربردی نشان می‌دیم که چطور با متدهای جنریک می‌تونیم کد قابل انعطاف‌تری ایجاد کنیم. 🔹 تفاوت Generic Method با Generic Class – یکی از مهم‌ترین بخش‌های ویدیو؛ اینجا دقیقاً یاد می‌گیری که متد جنریک چه فرقی با کلاس جنریک دارد و هرکدام در چه شرایطی بهترین انتخاب هستند. 🔹 جمع‌بندی و مرور – مروری سریع ولی کامل داریم تا مفاهیم در ذهنت تثبیت بشه. 🧠🔄 لینک داکیومنت تدریس: https://github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/document/generic 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی داخل گروه بپرس؛ من و مربی‌های گروه همیشه همراهت هستیم 💬🤝 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور، مناسب برای ورود حرفه‌ای به بازار کار اگر می‌خوای جنریک‌ها رو اصولی و حرفه‌ای یاد بگیری، این ویدیو یکی از مهم‌ترین جلسات این مسیر هست.

جزوه و مستندات

مفاهیم کلیدی

  • Generic Method

متدی است که Type Parameter مخصوص به خود را تعریف می‌کند. این متدها مستقل از کلاس هستند؛ یعنی حتی اگر کلاس جنریک نباشد، متد می‌تواند به‌صورت جنریک تعریف شود.

  • Type Parameter

یک جایگزین برای نوع داده، مانند T، است که هنگام تعریف متد مشخص می‌شود. این پارامتر قبل از نوع بازگشتی متد و داخل Diamond Operator قرار می‌گیرد و به متد اجازه می‌دهد با انواع مختلف داده کار کند.

  • Diamond Operator

علامت <> است که برای تعریف پارامترهای نوع استفاده می‌شود. در متدهای جنریک، این علامت دقیقاً قبل از نوع خروجی یا Return Type قرار می‌گیرد.

  • Type Inference

قابلیتی در جاوا است که به کامپایلر اجازه می‌دهد بر اساس آرگومان‌های ورودی متد، نوع داده T را به‌صورت خودکار تشخیص دهد. بنابراین هنگام فراخوانی متد، معمولاً نیازی به مشخص کردن صریح نوع نیست.

  • ClassCastException

خطایی است که در زمان اجرای برنامه یا Runtime رخ می‌دهد؛ زمانی که تلاش می‌کنیم یک شیء را به نوعی تبدیل کنیم که با آن سازگار نیست. استفاده از جنریک‌ها با فراهم کردن کنترل در زمان کامپایل، از بروز این خطا جلوگیری می‌کند.

موارد مصاحبه ای

  • تفاوت Generic Method با Generic Class در چیست؟

در Generic Class، پارامتر نوع برای کل کلاس تعریف می‌شود و می‌تواند روی فیلدها، سازنده‌ها و متدها اثر بگذارد. اما در Generic Method، پارامتر نوع فقط مخصوص همان متد است و اثری بر سایر بخش‌های کلاس ندارد.

  • آیا یک کلاس غیر جنریک می‌تواند متد جنریک داشته باشد؟

بله. متدهای جنریک مستقل از کلاس هستند. شما می‌توانید در یک کلاس معمولی، متدی تعریف کنید که Type Parameter مخصوص به خود را داشته باشد.

  • محل قرارگیری پارامتر نوع در ساختار متد کجاست؟

پارامتر نوع، مانند <T>، باید دقیقاً قبل از نوع بازگشتی متد قرار بگیرد؛ مانند void، String یا خود T.

  • مزیت اصلی استفاده از Generic Method چیست؟

مزیت اصلی آن افزایش قابلیت بازاستفاده یا Reusability کد و امنیت تایپی یا Type Safety است. با این روش، یک متد می‌تواند انواع مختلف داده را بپذیرد؛ بدون اینکه به Casting دستی نیاز باشد یا نگرانی بابت خطای ClassCastException وجود داشته باشد.

سناریو کاربردی

در این آموزش، دو سناریوی اصلی برای درک بهتر متدهای جنریک بررسی شده است:

۱. متد چاپگر عمومی

ابتدا متدی به نام print طراحی می‌شود که فقط مقدارهای رشته‌ای از نوع String را می‌پذیرد. برای اینکه این متد بتواند هر نوع داده‌ای، مانند Integer یا اشیای سفارشی مثل Person، را چاپ کند، آن را جنریک می‌کنیم.

با قرار دادن <T> قبل از void و تغییر نوع ورودی به T، متد می‌تواند هر ورودی سازگار را بدون مشکل بپذیرد و نمایش دهد.

۲. متد دریافت اولین آیتم آرایه

این متد که getFirst نام دارد، یک آرایه از نوع T[] دریافت می‌کند و اولین عنصر آن را برمی‌گرداند. نکته مهم این است که خروجی متد نیز از نوع T تعریف می‌شود.

به این ترتیب، اگر آرایه‌ای از رشته‌ها به متد بدهیم، خروجی به‌صورت خودکار از نوع String خواهد بود. اگر آرایه‌ای از اشیای Person بدهیم، کامپایلر تشخیص می‌دهد که خروجی از نوع Person است. این رفتار نشان‌دهنده قدرت تشخیص خودکار نوع یا Type Inference در جاوا است.

بیشتر بدانید

  • انعطاف‌پذیری در خروجی و ورودی

در متدهای جنریک، الزامی نیست که هم ورودی و هم خروجی از نوع جنریک باشند. بسته به نیاز برنامه، ممکن است فقط ورودی جنریک باشد، فقط خروجی جنریک باشد، یا هر دو جنریک باشند.

  • استقلال از Static بودن

مستقل بودن متد جنریک از کلاس به معنای static بودن آن نیست. منظور این است که تعریف Type Parameter در متد، وابسته به جنریک بودن یا نبودن خود کلاس نیست.