مشخصات مقاله
-
0
-
0.0
-
7831
-
0
-
0
آموزش Java-آموزش Generics در جاوا
نوشتن یک متود مرتب سازی مجزا که می تواند عناصر را در یک ردیف صحیح، یک ردیف String یا یک ردیف از هر نوعی که ترتیب را پشتیبانی می کند، بسیار خوب است.
متودهای Java Generic و گروه های generic برنامه نویسان را قادر می سازند تا با یک متود مجزا، مجموعه ای ازمتودهای مرتبط را مشخص کنند، یا با یک اعلامیه ی مجزای گروه، یک مجموعه از انواع مرتبط را تعیین کنند.
جنریک ها همچنین نوع زمان امنیت کامپایل را ارائه می دهند که به برنامه نویسان اجازه می دهد تا در زمان کامپایل موارد نامعتبر را بگیرد.
با استفاده ازمفهوم Java Generic ممکن است برای مرتب سازی یک ردیف از آبجکت ها، یک متود جنریک بنویسیم و سپس متود جنریک را با ردیف های Integer، ردیف های Double، ردیف های String و غیره، مورد درخواست قرار دهیم تا عناصر ردیف را مرتب سازی کنیم.
متودهای Generic:
شما می توانید یک متود جنریک مجزا بنویسید که می تواند توسط argument هایی از انواع مختلف فراخوانده شود. براساس انواع آرگیومنت های منتقل شده به متود generic، کامپایلر فراخوانی هر متود را به درستی کنترل می کند. در زیر قوانین مربوط به تعریف Generic Methods را مشاهده می کنید:
· همه ی بیانیه های متود generic دارای یک بخش نوع پارامتر می باشند که به وسیله ی پرانتزهای مثلثی محدود شده اند (< and >) که قبل از نوع گزارش متود قرار می گیرد (< E > در مثال بعدی).
· هر بخش مربوط به نوع پارامتر، حاوی یک یا چند پارامتر است که به وسیله ی کاما از یکدیگر جدا شده اند. یک پارامتر نوع، که به عنوان متغیر نوع نیز شناخته می شود، شناسه ای است که نام نوع generic را مشخص می کند.
· پارامترهای type، می توانند برای اعلام نوع و عمل گزارش استفاده شوند، همانطور که مکان ها (placeholder) برای انواع argument های منتقل شده به متود generic استفاده می شوند که با عنوان argument های حقیقی شناخته می شوند.
· بدنه ی یک متود generic مانند بدنه ی هر متود دیگری اعلام می شود. توجه داشته باشید که نوع پارامترها فقط می تواند انواع مرجع را نمایش دهد و نه انواع اولیه را ( مانند int، double و char).
مثال:
مثال زیر توضیح می دهد که چگونه می توانیم با استفاده از یک متود مجزای Generic، ردیفی ازانواع مختلف را چاپ کنیم.
public class GenericMethodTest
{
// generic method printArray
public static < E > void printArray( E[] inputArray )
{
// Display array elements
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
public static void main( String args[] )
{
// Create arrays of Integer, Double and Character
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( "Array integerArray contains:" );
printArray( intArray ); // pass an Integer array
System.out.println( "\nArray doubleArray contains:" );
printArray( doubleArray ); // pass a Double array
System.out.println( "\nArray characterArray contains:" );
printArray( charArray ); // pass a Character array
}
}
این مثال نتیجه ی زیر را تولید خواهد کرد:
Array integerArray contains:
1 2 3 4 5 6
Array doubleArray contains:
1.1 2.2 3.3 4.4
Array characterArray contains:
H E L L O
پارامترهای نوع محدود (Bounded Type)
زمان هایی وجود دارد که تمایل دارید انواعی را اجازه ی انتقال به پارامتر نوع را دارند، محدود کنید. برای مثال متودی که روی اعداد عمل می کند، ممکن است تنها لازم باشد نمونه هایی از Numbers و یا زیرمجموعه های آن را بپذیرد. این دلیل وجود پارامترهای نوع محدود می باشد.
برای اعلام یک پارامتر نوع محدود، نام پارامتر نوع را لیست کنید که توسط لغت کلیدی extends و سپس با محدوده ی بالای آن، دنبال می شود.
مثال:
مثال زیر توضیح می دهد که در یک حالت کلی چگونه extends به معنای گسترش ها (در گروه ها) و اجراها (در اینترفیس ها) می باشد. این مثال یک متود Generic می باشد برای گزارش بزرگترین آبجکت از سه آبجکت Comparable.
public class MaximumTest
{
// determines the largest of three Comparable objects
public static
{
T max = x; // assume x is initially the largest
if ( y.compareTo( max ) > 0 ){
max = y; // y is the largest so far
}
if ( z.compareTo( max ) > 0 ){
max = z; // z is the largest now
}
return max; // returns the largest object
}
public static void main( String args[] )
{
System.out.printf( "Max of %d, %d and %d is %d\n\n",
3, 4, 5, maximum( 3, 4, 5 ) );
System.out.printf( "Maxm of %.1f,%.1f and %.1f is %.1f\n\n",
6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );
System.out.printf( "Max of %s, %s and %s is %s\n","pear",
"apple", "orange", maximum( "pear", "apple", "orange" ) );
}
}
این مثال نتیجه ی زیر را تولید خواهد کرد:
Maximum of 3, 4 and 5 is 5
Maximum of 6.6, 8.8 and 7.7 is 8.8
Maximum of pear, apple and orange is pear
گروه های Generic:
بیانیه ی یک گروه generic مشابه بیانیه ی یک گروه non-generic می باشد، به جز اینکه نام گروه به وسیله ی یک بخش پارامتر نوع دنبال می شود.
همانند متودهای generic، بخش پارامتر نوع از یک گروه generic می تواند یک یا چند پارامتر نوع داشته باشد که به وسیله ی کاما مجزا شده اند. این گروه با عنوان گروه ها یا انواع پارامتری شده شناخته می شوند، زیرا یک یا چند پارامتر را می پذیرند.
مثال:
مثال زیر توضیح می دهد که چگونه می توانیم یک گروه generic را تعریف کنیم:
public class Box
{
private T t;
public void add(T t)
{
this.t = t;
}
public T get()
{
return t;
}
public static void main(String[] args) {
Box
Box
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