Thứ Sáu, 22 tháng 2, 2019

Học lập trình Java - Java - Generics

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 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.


Học lập trình Java chuyên nghiệp
Học lập trình Java chuyên nghiệp

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 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ố loại được phân tách bằng dấu ngoặc nhọn (<và>) trước loại 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.

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 Học lập trình Java.
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ụ, Học lập trình Java 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 nó.

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 Học lập trình Java.

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. 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

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...