+1 امتیاز
قبل در برنامه نویسی توسط (20 امتیاز)
ویرایش شده قبل توسط
با سلام.

دوستان Generics یعنی چه؟ مثلا اینکه ArrayList یک نوع داده ی Generics است چه مفهومی داره؟

با تشکر.

2 پاسخ

+1 امتیاز
قبل توسط (80 امتیاز)
ویرایش شده قبل توسط

Generic یا جنریک <> یعنی :

  1. یک نوع پیاده سازی کلاس و یا متد است که با انواع مختلفی از داده ها در ورودی بدون مشخص کردن نوع آن انجام میشود.ورودی می تواند Int,String,Double,....  و یا حتی از جنس آبجکتی از کلاس باشدو
  2. پاس کردن آرگومان را می توانیم به زمان Run Time  موکول کنیم و در آنجا با توجه به نیاز خود مقادیر ورودی و جنس آنها را مشخص کنیم.
  3. با توجه به اینکه <>ArrayList ها هم این خاصیت را دارند پس از نوع جنریک می باشند.

به مثال زیر توجه کنید :

package genericmethod;

public class GenericMethod
{
    //یک متد بانوع ورودی آرایه ای از هرنوع و خروجی
    public static < E > void printArray( E[] inputArray )
{
    //داخل متد عناصر ارایه رو چاپ میکنیم
    for ( E element : inputArray ){
        System.out.printf( "%s ", element );
    }
    System.out.println();
}

public static void main( String args[] )
{
    //تعریف سه آرایه از انواع موجود در جاوا برای استفاده در متد جنریک
    Integer[] intArray = { 1, 2, 3, 4, 5 };
    Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
    Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

    System.out.println( "نتجیه استفاده برای آرایه نوع Integer:" );
    printArray( intArray ); // pass an Integer array

    System.out.println( "\nنتیجه متد برای آرایه نوع ِ Double:" );
    printArray( doubleArray ); // pass a Double array

    System.out.println( "\n نتیجه متد برای ارایه نوع کاراکتری:" );
    printArray( charArray ); // pass a Character array
  }
}

نتیجه اجرای کد بالا :

نتجیه استفاده برای آرایه نوع Integer:
1 2 3 4 5

نتیجه متد برای آرایه نوع ِ Double:
1.1 2.2 3.3 4.4

نتیجه متد برای ارایه نوع کاراکتری:
H E L L O

--------------------------------------------------------------------

یک مثال دیگه :

public class Box<T> {

    //استفاده از نوع پارامتر پویا T
    private T t;

    //استفاده از نوع پارامتر پویا T در تعریف متد
    public void add(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

}

حالا از کد بالا در کد پایین استفاده می کنیم توجه کنید :

public static void main(String[] args) {
    Box<Integer> integerBox = new Box<Integer>();
    Box<String> stringBox = new Box<String>();

    integerBox.add(new Integer(10));
    stringBox.add(new String("Hello World"));

    System.out.printf("Integer Value :%d\n\n", integerBox.get());
    System.out.printf("String Value :%s\n", stringBox.get());
}

و اما خروجی :

Integer Value :10
String Value :Hello World

0 امتیاز
قبل توسط (1.1هزار امتیاز)

به کلاس هایی مثل ArrayList در جاوا Generic Class می گویند. Generics nv [h,h به ما این امکان را می دهد که کلاس هایی مستقل از Type تعریف کنیم. برای مثال ArrayList مستقل از نوع کلاس اشیائی که درون آن قرار می گیرد تعریف شده است و ما می توانیم در زمان استفاده، مشخص کنیم که چه نوع اشیائی درون ArrayList قرار می گیرند.

List<String> strList = new ArrayList<>();

List<Employee> employeeList = new ArrayList<>();

در کد بالا ArrayList که فقط یک کلاس است و یک بار تعریف شده ولی چون بصورت Generic تعریف شده است، ما می توانیم در زمان استفاده مشخص کنیم که ArrayList چه نوع داده ای می خواهیم داشته باشیم و لزومی ندارد برای لیست رشته ها یک کلاس و برای لیست کارمندان یک کلاس دیگر تعریف کنیم.

یکی دیگر از مزایای Generic کلاس ها، type safety است. بدین معنی که وقتی شما لیستی از String ها تعریف می کنید اگر یک Integer درون آن لیست اضافه کنید در زمان Compile برنامه خطا دریافت می کنید نه در زمان اجرا:

List<String> strList = new ArrayList<>();
strList.add(5); // compilation-time error

و همچنین وقتی یک عنصر را از لیست String ها می خوانیم مطمئن هستیم که خروجی String است و نیازی به cast کردن نیز نداریم:

List<String> strList = new ArrayList<>();
strList.add("test");
String s1 = strList.get(0);

سوالات مشابه

+1 امتیاز
2 پاسخ 839 بازدید
+1 امتیاز
1 پاسخ 987 بازدید
+1 امتیاز
1 پاسخ 318 بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
+2 امتیاز
1 پاسخ 340 بازدید
سوال شده 3 سال قبل در برنامه نویسی توسط sina-deuxshiri (12 امتیاز)
+2 امتیاز
1 پاسخ 414 بازدید
سوال شده 3 سال قبل در برنامه نویسی توسط 1993 (242 امتیاز)
0 امتیاز
1 پاسخ 440 بازدید
0 امتیاز
2 پاسخ 1.7هزار بازدید
...