آموزش متد های جنریک در جاوا، کامل و جامع


معرفی کامل متدهای جنریک در جاوا
براي خريد اين درس نياز است وارد سايت شويد. در صورت نداشتن حساب کاربري عضو شويد.

آموزش متدهای جنریک در جاوا، کامل و جامع

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

بدنه متدهای جنریک مانند بقیه متدها است اما تفاوت آن ها در استفاده از نوع داده ورودی و خروجی است.

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

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

public class MyClass1 {

    public <T> T fun1(T data){

        System.out.println(data.getClass().getName());

        return data;

    }

}

متد fun1 یک ورودی جنریک دریافت می‌کند و نام کلاس آن را چاپ می‌کند و سپس خود تابع را برمی‌گرداند. 

public static void main(String[] args) {

       MyClass1 m1=new <Boolean>MyClass1(true);

       System.out.println(m1.fun1(3000));

       System.out.println(m1.fun1("ali"));

    }

خروجی

java.lang.Integer

3000

java.lang.String

ali

همچنین می‌شود متدی تعریف کرد که ورودی نداشته باشد و خروجی آن جنریک باشد.

public class MyClass1 {

    public <T> T fun2(){

        return (T)"Hello java";

    }

}

زمانی که یک تابع ورودی نداشته باشد و خروجی آن جنریک باشد باید قبل از فراخانی تابع نوع آن مشخص شود

MyClass1 m1=new <Boolean>MyClass1(true);

System.out.println(m1.<String>fun2());

System.out.println(m1.<Integer>fun2());

System.out.println(m1.<Double>fun2());

خروجی

Hello java

Hello java

Hello java

می‌خواهیم یک تابع بسازیم که یک عدد(int, double, float, long, …) بگیرد و آن عدد را + 10 کند و به عنوان خروجی برگرداند.

public class MyClass2 {

    public static double fun1(Number num){

        return num.doubleValue()+10;

    }

}

نحوه فراخوانی متد  

System.out.println(MyClass2.fun1(12));

       System.out.println(MyClass2.fun1(12.456));

       System.out.println(MyClass2.fun1((long)24543654));

       System.out.println(MyClass2.fun1((short)24));

خروجی

22.0

22.456

2.4543664E7

34.0

حال می‌خواهیم یک تابع بنویسم که لیستی از اعداد(int, float, long, short, …) را بگیرد و جمع اعداد را برگرداند.

public static double fun2(List<Number> numbers){

        double sum=0;

        for(Number number:numbers){

            sum+=number.doubleValue();

        }

        return sum;

    }

 نحوه فراخانی متد

      

List<Number> list1=new ArrayList<>(Arrays.asList(12,3,5,67,67));

       List<Integer>  list2=new ArrayList<>(Arrays.asList(12,3,5,67,67));

       List<Double>  list3=new ArrayList<>(Arrays.asList(12.33,3.14,56.789));


      

System.out.println(MyClass2.fun2(list1));

       System.out.println(MyClass2.fun2(list2));

       System.out.println(MyClass2.fun2(list3));

اما بجز list1 بقیه لیست‌ها هنگام صدا زدن تابع fun2 با خطا مواجعه می‌شود. علت آن این است که لیستی از Interger و لیستی از Double فرزند لیستی از Number نیستند و به همین علت با خطا مواجعه می‌شود.

برای حل این خطا کد زیر را جایگزین تابع fun2 می‌کنیم.

public static double fun2(List<? extends Number> numbers){

        double sum=0;

        for(Number number:numbers){

            sum+=number.doubleValue();

        }

        return sum;

    }

  در واقع در متد بالا گفتیم هر کلاسی که فرزند number باشد مورد تایید است.

 

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

 

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

ممنون از همراهی شما

 


نظر بدهید نظر شما در تصمیم دیگران اثرگذار است. لطفا برای ما و همراهان درسمن نظر خود را بنویسید.
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.


مشخصات دوره


مدرس دوره : مهدی عباسی
تعداد جلسات : جلسه
مدت زمان : 2057 دقیقه
حجم دوره : 6/35 گیگابایت
سطح مهارت : پیشرفته
وضعیت دوره : پایان یافته
تعداد دانشجویان : 1210
: میانگین امتیاز
برای دسترسی به این دوره وارد یا عضو شوید.
مهدی عباسی

مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و ....