Nó sẽ được tốt đẹp nếu chúng ta có thể viết một cách sắp xếp duy nhất mà có thể sắp xếp các phần tử trong một mảng Integer, một mảng String hoặc một mảng của bất kỳ loại hỗ trợ đặt hàng.
Phương pháp Java Generic và các lớp học chung cho phép lập trình để xác định, với một tuyên bố đơn phương, một tập hợp các phương pháp liên quan hoặc, với một lớp khai báo duy nhất, một tập hợp các dạng liên quan, tương ứng.
Generics cũng cung cấp loại an toàn thời gian biên dịch cho phép các lập trình viên để bắt loại có hiệu lực tại thời gian biên dịch.
Sử dụng Java Generic khái niệm, chúng ta có thể viết một phương pháp chung để phân loại một mảng của các đối tượng, sau đó gọi phương thức chung với Integer mảng, mảng Double, mảng String và như vậy, để sắp xếp các phần tử mảng.
Generics trong java
Generic Methods:
Bạn có thể viết một phương pháp kê khai chung duy nhất mà có thể được gọi với đối số của các loại khác nhau. Dựa trên các loại của các đối số được truyền cho phương pháp chung, các trình biên dịch xử lý mỗi phương pháp gọi một cách thích hợp. Sau đây là các quy tắc để xác định phương pháp chung:
- Tất cả tờ khai phương pháp chung có một phần kiểu tham số phân cách bởi dấu ngoặc nhọn (<và>) mà trước kiểu trả về của phương pháp (<E> trong ví dụ tiếp theo).
- Mỗi phần tham số kiểu có chứa một hoặc nhiều tham số kiểu cách nhau bởi dấu phẩy. Một tham số kiểu, cũng được biết đến như là một biến kiểu, là một định danh có quy định cụ thể một loại tên generic.
- Một phương pháp chung cơ thể được tuyên bố như thế trong bất kỳ phương pháp nào khác. Lưu ý rằng các thông số loại có thể chỉ đại diện cho các loại tài liệu tham khảo, không loại nguyên thủy (như int, double, char).
Ví dụ:
Ví dụ sau đây minh họa cách chúng ta có thể in mảng của loại hình khác nhau bằng cách sử dụng một phương pháp chung duy nhất:
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
}
}
Kkết quả sau đây:
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 Loại Các tham số:
Có thể đôi khi bạn sẽ muốn hạn chế các loại định dạng được cho phép để được thông qua một tham số kiểu. Ví dụ, một phương pháp để tính toán trên số chỉ có thể muốn chấp nhận các trường hợp hoặc số lớp con của nó. Đây là những gì các tham số kiểu chặn được cho.
Để khai báo một tham số kiểu chặn, danh sách tên các loại tham số, tiếp theo là các từ khóa mở rộng, tiếp theo trên ràng buộc của nó.
Java – Generics
Ví dụ:
Ví dụ sau đây minh họa cách mở rộng được sử dụng trong một ý nghĩa chung có nghĩa hoặc “kéo dài” (như trong các lớp học) hay “dụng cụ” (như trong giao diện). Ví dụ này là Generic phương pháp để trả lại lớn nhất của ba đối tượng tương đương:
public class MaximumTest
{
// determines the largest of three Comparable objects
public static <T extends Comparable<T>> T maximum(T x, T y, T z)
{
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" ) );
}
}
Kết quả:
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 Classes:
A generic class khai trông giống như một lớp khai báo không chung chung, trừ tên lớp được theo sau bởi một phần tham số kiểu.
Như với các phương pháp chung, các phần kiểu tham số của một lớp chung có thể có một hoặc nhiều tham số kiểu cách nhau bởi dấu phẩy. Những nhóm này được biết đến như là các lớp tham số hoặc các kiểu tham số bởi vì họ chấp nhận một hoặc nhiều tham số.
Java – Generics
Ví dụ:
Ví dụ sau đây minh họa cách chúng ta có thể định nghĩa một lớp chung:
public class Box<T> {
private 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());
}
}
Kết quả:
Integer Value :10
String Value :Hello World
0 nhận xét:
Đăng nhận xét