متدهای جنریک

اگر بخواهید چندین متد با عملکرد مشابه ایجاد کنید و فقط تفاوت آنها در نوع داده ای باشد که قبول می کنند (مثلا یکی نوع int و دیگری نوع double را قبول کند) می توان از متدهای جنریک برای صرفه جویی در کدنویسی استفاده کرد. ساختار عمومی یک متد جنریک به شکل زیر است :

<type> returnType methodName(type argument1)
{
    type someVariable;
}

مشاهده می کنید که قبل از نوع برگشتی متد یک نوع در داخل دو علامت بزرگتر و کوچکتر آمده است ( <type> ) که همه انواع در جاوا می توانند جایگزین آن شوند.
برنامه زیر مثالی از نحوه استفاده از متد جنریک می باشد :

package myfirstprogram;

public class MyFirstProgram 
{  
    public static <X> void Show(X val)
    {                                 
        System.out.println(val);      
    }                                 
    
    public static void main(String[] args) 
    {
        int intValue = 5;
        double doubleValue = 10.54;
        String stringValue = "Hello";
        boolean boolValue = true;

        Show(intValue);
        Show(doubleValue);
        Show(stringValue);
        Show(boolValue);
    } 
}
5
10.54
Hello
true

یک متد جنریک ایجاد کرده ایم که هر نوع داده ای راقبول کرده و مقادیر آنها را نمایش می دهد (خطوط 8-5). سپس داده های مختلفی با وظایف یکسان به آن ارسال می کنیم. متد نیز نوع X را بسته به نوع داده ای که به عنوان آرگومان ارسال شده است تغییر می دهد. به عنوان مثال وقتی یک داده از نوع int ارسال می کنیم، همه مکانهایی که X در آنها وجود دارد به int تبدیل می شوند و متد به صورت زیر در می آید :

public static void Show (int val)
{
    System.out.println(val);
}

به یک نکته در مورد استفاده از متدهای جنریک توجه کنید و آن این است که شما نمی توانید در داخل کدهای مربوط به متد محاسبات انجام دهید مثلا دو عدد را با هم جمع کنید چون کامپایلر نمی تواند نوع واقعی عملوندها را تشخیص دهد، ولی به سادگی می توان مقادیر را در داخل متد نشان داد چون کامپایلر هر نوع داده ای را که توسط متد System.out.println() استفاده می شود را می تواند تشخیص دهد.

public static <X> void Show(X val1, X val2)
{
    System.out.println(val1 + val2);
}

شما می توانید چندین نوع خاص را برای متد جنریک ارسال کنید، برای این کار هر نوع را به وسیله کاما از دیگری جدا کنید.

public static <X, Y> void Show(X val1, Y val2)
{
    System.out.println(val1);
    System.out.println(val2);
}

به مثال زیر که در آن دو مقدار مختلف به متد ارسال شده است توجه کنید :

Show(5, true);

مشاهده می کنید که X با نوع int و Y با نوع bool جایگزین می شود. این نکته را نیز یادآور شویم که شما می توانید دو آرگومان هم نوع را هم به متد ارسال کنید :

Show(5, 10);