Sẽ thật tuyệt nếu chúng ta có thể viết một phương thức sắp xếp duy nhất có thể sắp xếp các phần tử trong mảng Integer, mảng String hoặc một mảng thuộc bất kỳ loại nào hỗ trợ sắp xếp thứ tự.
Các phương thức chung và các lớp chung của Khóa học lập trình Java cho phép các lập trình viên chỉ định, với một khai báo phương thức đơn, một tập hợp các phương thức liên quan hoặc với một khai báo lớp duy nhất, một tập hợp các loại liên quan, tương ứng.
Các phương thức chung và các lớp chung của Khóa học lập trình Java cho phép các lập trình viên chỉ định, với một khai báo phương thức đơn, một tập hợp các phương thức liên quan hoặc với một khai báo lớp duy nhất, một tập hợp các loại liên quan, tương ứng.
Khóa học lập trình Java |
Generics cũng cung cấp an toàn loại thời gian biên dịch cho phép lập trình viên bắt các loại không hợp lệ tại thời gian biên dịch.
Sử dụng khái niệm Khóa học lập trình Java Generic, chúng ta có thể viết một phương thức chung để sắp xếp một mảng các đối tượng, sau đó gọi phương thức chung với mảng Integer, mảng kép, mảng String, v.v., để sắp xếp các phần tử mảng.
Bạn có thể viết một khai báo phương thức chung duy nhất có thể được gọi với các đối số của các loại khác nhau. Dựa trên các loại đối số được truyền cho phương thức chung, trình biên dịch xử lý mỗi lệnh gọi phương thức một cách thích hợp. Sau đây là các quy tắc để xác định Phương thức chung -
Tất cả các khai báo phương thức chung có phần tham số kiểu được phân tách bằng dấu ngoặc nhọn (<và>) trước kiểu trả về của phương thức (<E> trong ví dụ tiếp theo).
Mỗi phần tham số loại chứa một hoặc nhiều tham số loại được phân tách bằng dấu phẩy. Một tham số loại, còn được gọi là biến loại, là một định danh chỉ định tên loại chung.
Khóa học lập trình Java Các tham số loại có thể được sử dụng để khai báo kiểu trả về và đóng vai trò giữ chỗ cho các loại đối số được truyền cho phương thức chung, được gọi là đối số loại thực tế.
Cơ thể của một phương thức chung được khai báo giống như bất kỳ phương thức nào khác. Lưu ý rằng các tham số loại chỉ có thể đại diện cho các loại tham chiếu, không phải các kiểu nguyên thủy (như int, double và char).
Ví dụ sau minh họa cách chúng ta có thể in một mảng loại khác bằng một phương thức Chung duy nhất
Để khai báo một tham số loại giới hạn, hãy liệt kê tên của tham số loại, theo sau là từ khóa mở rộng, theo sau là giới hạn trên của Khóa học lập trình Java.
Ví dụ sau minh họa cách mở rộng được sử dụng theo nghĩa chung có nghĩa là "mở rộng" (như trong các lớp học) hoặc "thực hiện" (như trong các giao diện). Ví dụ này là phương thức Chung để trả về lớn nhất trong ba đối tượng Có thể so sánh
Như với các phương thức chung, phần tham số loại của một lớp chung có thể có một hoặc nhiều tham số loại được phân tách bằng dấu phẩy. Khóa học lập trình Java Các lớp này được gọi là các lớp được tham số hóa hoặc các loại tham số vì chúng chấp nhận một hoặc nhiều tham số.
Ví dụ sau minh họa cách chúng ta có thể định nghĩa một lớp chung
Sử dụng khái niệm Khóa học lập trình Java Generic, chúng ta có thể viết một phương thức chung để sắp xếp một mảng các đối tượng, sau đó gọi phương thức chung với mảng Integer, mảng kép, mảng String, v.v., để sắp xếp các phần tử mảng.
Phương pháp chung
Bạn có thể viết một khai báo phương thức chung duy nhất có thể được gọi với các đối số của các loại khác nhau. Dựa trên các loại đối số được truyền cho phương thức chung, trình biên dịch xử lý mỗi lệnh gọi phương thức một cách thích hợp. Sau đây là các quy tắc để xác định Phương thức chung -
Tất cả các khai báo phương thức chung có phần tham số kiểu được phân tách bằng dấu ngoặc nhọn (<và>) trước kiểu trả về của phương thức (<E> trong ví dụ tiếp theo).
Mỗi phần tham số loại chứa một hoặc nhiều tham số loại được phân tách bằng dấu phẩy. Một tham số loại, còn được gọi là biến loại, là một định danh chỉ định tên loại chung.
Khóa học lập trình Java Các tham số loại có thể được sử dụng để khai báo kiểu trả về và đóng vai trò giữ chỗ cho các loại đối số được truyền cho phương thức chung, được gọi là đối số loại thực tế.
Cơ thể của một phương thức chung được khai báo giống như bất kỳ phương thức nào khác. Lưu ý rằng các tham số loại chỉ có thể đại diện cho các loại tham chiếu, không phải các kiểu nguyên thủy (như int, double và char).
Ví dụ sau minh họa cách chúng ta có thể in một mảng loại khác bằng một phương thức 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 } }Điều này sẽ tạo ra kết quả sau
Array integerArray contains:
1 2 3 4 5
Array doubleArray contains:
1.1 2.2 3.3 4.4
Array characterArray contains:
H E L L O
Tham số loại giới hạn
Có thể đôi khi bạn sẽ muốn hạn chế các loại loại được phép truyền vào tham số loại. Ví dụ, một phương thức hoạt động trên các số có thể chỉ muốn chấp nhận các thể hiện của Số hoặc các lớp con của nó. Đây là những gì tham số loại giới hạn dành cho.Để khai báo một tham số loại giới hạn, hãy liệt kê tên của tham số loại, theo sau là từ khóa mở rộng, theo sau là giới hạn trên của Khóa học lập trình Java.
Ví dụ sau minh họa cách mở rộng được sử dụng theo nghĩa chung có nghĩa là "mở rộng" (như trong các lớp học) hoặc "thực hiện" (như trong các giao diện). Ví dụ này là phương thức Chung để trả về lớn nhất trong ba đối tượng Có thể so sánh
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("Max 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")); } }Điều này sẽ tạo ra kết quả sau
Max of 3, 4 and 5 is 5
Max of 6.6,8.8 and 7.7 is 8.8
Max of pear, apple and orange is pear
Các lớp học chung
Một khai báo lớp chung trông giống như một khai báo lớp không chung chung, ngoại trừ tên lớp được theo sau bởi một phần tham số loại.Như với các phương thức chung, phần tham số loại của một lớp chung có thể có một hoặc nhiều tham số loại được phân tách bằng dấu phẩy. Khóa học lập trình Java Các lớp này được gọi là các lớp được tham số hóa hoặc các loại tham số vì chúng chấp nhận một hoặc nhiều tham số.
Ví dụ sau 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()); } }Điều này sẽ tạo ra kết quả sau
Integer Value :10 String Value :Hello World
Không có nhận xét nào:
Đăng nhận xét