Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

Generic Method

📖توضیحات درس

🎥 این ویدیو قسمت هفتاد و هشتم از بوت‌کمپ رایگان جاواست. 📚 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 هر سوالی داشتی داخل گروه بپرس؛ من و مربی‌های گروه همیشه همراهت هستیم 💬🤝 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور، مناسب برای ورود حرفه‌ای به بازار کار اگر می‌خوای جنریک‌ها رو اصولی و حرفه‌ای یاد بگیری، این ویدیو یکی از مهم‌ترین جلسات این مسیر هست.
00:10:53🎯رایگان

📄جزوه

مفاهیم کلیدی

  • 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، پارامتر نوع فقط مخصوص همان متد است و تاثیری بر سایر بخش‌های کلاس ندارد.

  • آیا یک کلاس غیر جنریک می‌تواند متد جنریک داشته باشد؟ بله، متدهای جنریک مستقل از کلاس هستند. شما می‌توانید در یک کلاس معمولی، متدی تعریف کنید که پارامتر نوع خود را داشته باشد.

  • محل قرارگیری پارامتر نوع در ساختار متد کجاست؟ پارامتر نوع (مثلاً <T>) باید دقیقاً قبل از نوع بازگشتی متد (مانند void یا String یا خود T) قرار بگیرد.

  • مزیت اصلی استفاده از Generic Method چیست؟ افزایش قابلیت بازاستفاده (Reusability) کد و امنیت تایپی (Type Safety). با این روش، یک متد می‌تواند انواع مختلف داده را بپذیرد بدون اینکه نیاز به Casting دستی یا نگرانی بابت خطای ClassCastException باشد.

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

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

۱. متد چاپگر عمومی (print): ابتدا متدی طراحی می‌شود که فقط رشته (String) می‌پذیرد. برای اینکه این متد بتواند هر نوع داده‌ای (مانند Integer یا اشیاء شخصی‌سازی شده مثل Person) را چاپ کند، آن را جنریک می‌کنیم. با قرار دادن <T> قبل از void و تغییر نوع ورودی به T‌، متد قادر خواهد بود هر ورودی را بدون مشکل بپذیرد و نمایش دهد.

۲. متد دریافت اولین آیتم آرایه (getFirst): این متد یک آرایه از نوع T[] دریافت کرده و اولین عنصر آن را برمی‌گرداند. نکته مهم در اینجا این است که خروجی متد نیز از نوع T تعریف می‌شود. به این ترتیب، اگر آرایه‌ای از رشته‌ها به متد بدهیم، خروجی به صورت خودکار String خواهد بود و اگر آرایه‌ای از اشیاء Person بدهیم، کامپایلر تشخیص می‌دهد که خروجی از نوع Person است. این موضوع نشان‌دهنده قدرت تشخیص خودکار نوع (Inference) توسط جاوا است.

بیشتر بدانید

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

  • استقلال از Static بودن مستقل بودن متد جنریک از کلاس به معنای استاتیک بودن آن نیست، بلکه به این معناست که تعریف تایپ پارامتر متد، وابستگی به جنریک بودن یا نبودن خودِ کلاس ندارد.