English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Java

Java Управление потоком

Java Массивы

Java Ориентирован на объекты (I)

Java Ориентирован на объекты (II)

Java Ориентирован на объекты (III)

Обработка исключений Java

Java Список (List)

Java Queue (очередь)

Java Map наборы

Java Set наборы

Java Вход/Выход (I/O)

Java Reader/Writer

Другие темы Java

Diamante оператор в Java 9

Java 9 новые возможности

Diamante оператор был введен в java 7, чтобы сделать код более читаемым, но он не может использоваться в анонимных внутренних классах.

В java 9 его можно использовать вместе с анонимными внутренними классами, что улучшает читаемость кода.

Рассмотрим следующий код Java 9 до этого:

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();
}

Результат выполнения вывода:

1
2
Тест

В Java 9 мы можем использовать оператор <> в анонимных классах, например:

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();
}

Результат выполнения вывода:

1
2
Тест

Java 9 новые возможности