Java Generics - Xóa các loại ràng buộc

Trình biên dịch Java thay thế các tham số kiểu trong kiểu chung bằng liên kết của chúng nếu các tham số kiểu bị giới hạn được sử dụng.

Thí dụ

package com.tutorialspoint;

public class GenericsTester {
   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
      Box<Double> doubleBox = new Box<Double>();

      integerBox.add(new Integer(10));
      doubleBox.add(new Double(10.0));

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

class Box<T extends Number> {
   private T t;

   public void add(T t) {
      this.t = t;
   }

   public T get() {
      return t;
   }   
}

Trong trường hợp này, trình biên dịch java sẽ thay thế T bằng lớp Số và sau khi xóa kiểu, trình biên dịch sẽ tạo bytecode cho đoạn mã sau.

package com.tutorialspoint;

public class GenericsTester {
   public static void main(String[] args) {
      Box integerBox = new Box();
      Box doubleBox = new Box();

      integerBox.add(new Integer(10));
      doubleBox.add(new Double(10.0));

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

class Box {
   private Number t;

   public void add(Number t) {
      this.t = t;
   }

   public Number get() {
      return t;
   }   
}

Trong cả hai trường hợp, kết quả là như nhau -

Đầu ra

Integer Value :10
Double Value :10.0