Java 9 - Toán tử kim cương lớp bên trong

Toán tử kim cương đã được giới thiệu trong java 7 để làm cho mã dễ đọc hơn nhưng nó không thể được sử dụng với các lớp ẩn danh bên trong. Trong java 9, nó cũng có thể được sử dụng với lớp ẩn danh để đơn giản hóa mã và cải thiện khả năng đọc. Hãy xem xét đoạn mã sau trước Java 9.

Tester.java

public class Tester {
   public static void main(String[] args) {
      Handler<Integer> intHandler = new Handler<Integer>(1) {
         @Override
         public void handle() {
            System.out.println(content);
         }
      };
      intHandler.handle();
      Handler<? extends Number> intHandler1 = new Handler<Number>(2) {
         @Override
         public void handle() {
            System.out.println(content);
         }
      };
      intHandler1.handle();
      Handler<?> handler = new Handler<Object>("test") {
         @Override
         public void handle() {
            System.out.println(content);
         }
      };
      handler.handle();    
   }  
}
abstract class Handler<T> {
   public T content;

   public Handler(T content) {
      this.content = content; 
   }
   
   abstract void handle();
}

Đầu ra

1
2
Test

Với Java 9, chúng ta có thể sử dụng toán tử <> với lớp ẩn danh như hình bên dưới.

Tester.java

public class Tester {
   public static void main(String[] args) {
      Handler<Integer> intHandler = new Handler<>(1) {
         @Override
         public void handle() {
            System.out.println(content);
         }
      };
      intHandler.handle();
      Handler<? extends Number> intHandler1 = new Handler<>(2) {
         @Override
         public void handle() {
            System.out.println(content);
         }
      };
      intHandler1.handle();
      Handler<?> handler = new Handler<>("test") {
         @Override
         public void handle() {
            System.out.println(content);
         }
      };

      handler.handle();    
   }  
}

abstract class Handler<T> {
   public T content;

   public Handler(T content) {
      this.content = content; 
   }
   
   abstract void handle();
}

Đầu ra

1
2
Test